środa, 21 marca 2012

Redis Cache Provider

Redis jest to bardzo proste narzędzie, które pozwala cachować dane, które często pobieramy z bazy, a ich stan nie ulega zbyt często zmianie, dlatego warto przechowywać je w cache'u. Dane te przechowujemy jako klucz - wartość. Redis pozwala przyspieszyć pobieranie danych, a co za tym idzie czas ładowania strony. Redis udostępniany jest jako open source i można go pobrać z tej strony: http://redis.io/. Po pobraniu redisa uruchamiamy serwer, który domyślnie korzysta z portu 6379. W paczce z serwerem redisa dostępny jest również klient za pomocą którego możemy przetestować polecenia redisa opisane na wyżej wymienionej stronie (dodawania, sprawdzania czy usuwania kluczy).

Aby korzystać z redisa w .NET potrzebna jest odpowiednia biblioteka, którą musimy dołączyć do naszego projektu. Na stronie redisa znajdziemy listę takich bibliotek. Ja korzystam z ServiceStack.Redis dostępnej tutaj.

Projekt RedisCacheProvider posiada klasę RedisCache, w której zawarte są funkcje potrzebne do operacji na redisie, jak np. funkcja Get to pobrania wartości klucza, funkcja Add do dodania klucza z wartością, funkcja Replace do podmiany wartości, Remove do usunięcia, itd.


public class RedisCache
    {
        private static PooledRedisClientManager redisManager = new PooledRedisClientManager("127.0.0.1:6379");

public static T Get<T>(string key)
        {
            T oOutObject;
            using (var rc = redisManager.GetClient()) 
            {
                    oOutObject = rc.Get<T>(key);
            }
            return oOutObject;
        }

        public static void Add<T>(string key, T value, DateTime expirationDate)
        {
            using (var rc = redisManager.GetClient())
            {
                if(value != null)
                    rc.Add<T>(key, value, expirationDate);
            }
        }

public static void Replace<T>(string key, T entry, DateTime expirationDate)
        {
            using (var rc = redisManager.GetClient())
            {
                rc.Replace<T>(key, entry, expirationDate);
            }
        }

public static void Remove(string key)
        {
            using (var rc = redisManager.GetClient())
            {
                rc.Remove(key); 
            }
        }

        public static void Set<T>(string key, T entry, DateTime expirationDate)
        {
            using (var rc = redisManager.GetClient())
            {
                if (rc.Get<T>(key) != null)
                {
                    rc.Replace<T>(key, entry, expirationDate);
                }
                else
                {
                    rc.Add<T>(key, entry, expirationDate);
                }
            }
        }

}

Przykładowo do przechowania w redisie jakiejś wartości, np.
string test = "wartość testowa";

wystarczy wpisać:

RedisCache.Add<string>("klucz_testowy", test, DateTime.Now.AddDays(1));

Wartość pierwsza to klucz (nazwa) pod jaką będzie przechowywana dana wartość w redisie. Drugi parametr to wartość, którą chcemy przechować w redisie, natomiast trzeci określa datę wygaśnięcia klucza. W tym przypadku klucz zostanie usunięty za jeden dzień.

Brak komentarzy:

Prześlij komentarz