Redis 101

Can Kayı
inventiv
Published in
5 min readJul 14, 2023

Redis, açılımı Remote Dictionary Server (Uzak Sözlük Sunucusu) olan, cache tabanlı, key-value veritabanı olarak kullanılan açık kaynaklı bir teknolojidir. Redis, ana bellekte (RAM) çalışır ve hızlı okuma/yazma işlemleri için optimize edilmiştir.

Redis, birçok farklı kullanım senaryosu için uygun bir veritabanıdır. Örneğin, oturum yönetimi(session management), mesajlaşma(message queues), sıralama(sorting), önbellekleme(cache management) ve gerçek zamanlı veri analizi(real time data analysis) gibi uygulamalar için kullanılabilir. Veri yapısı olarak, string, hash, list, set ve sorted set veri tiplerini destekler.

Redis Neden Kullanılmalı?

Redis’in kullanım amacı aslında T-SQL veya NoSQL tipindeki veritabanlarının sorgu çalıştırma, diskten okuma ve sonuç alma işlemlerini hızlandırmak ve basitleştirmektir. Tablo mantığından uzak, tamamen key-value yapısına bağlı bu sistem aynı zamanda clustering ve imaging özelliğine de sahiptir. Normalde MSSQL üzerinden çalıştırdığımız bir sorgu sonucunun gelmesinden yaklaşık 100 kat daha hızlı çalışır, bunun sebebi bilgilerin diskte değil memoryde tutulmasıdır.

Redis Kurulumu

Redis’i Windows makineler üzerinde kurmak için aşağıda gösterildiği gibi bu adresten “Assets” kısmındaki .msi installer veya zip halini indirmemiz gerekiyor.

Msi installer üzerinden yüklenen dizine veya zip içerisinden ilk olarak redis-server.exe yi çalıştırıp Redis’in ayağa kalkmasını sağlıyoruz. Sonra da redis-cli.exe yi çalıştırarak komut girdi uygulamasını açıyoruz.

Redis’in ayakta olup olmadığını test edebilmek için CLI üzerinden “ping” komutunu çalıştırırsak sonucunun “PONG” olarak geldiğini görmemiz yeterli.

Örneğin, login bilgilerinin tutulması için ufak bir konsol örneği yapabiliriz. Anahtar olarak “userid”, “username” ve “token” tuttuğumuzu hayal edelim. “set” komutu ile aşağıdaki gibi set <key> <value> halinde kullanılabilir.

Anahtarlarımızı oluşturduktan sonra Redis cache üzerinde kaç anahtarımızın olduğunu görmek için keys * komutunu çalıştırabiliriz. Anahtarlarımızın tekil oalrak değerlerini görmek istersek get <key> komutuyla görebiliriz.

Redis hakkında daha çok komut örneği için bu sayfayı kullanabilirsiniz.

Redis Windows Servis Kurulumu

Diyelim ki Redis’i cmd üzerinden çalıştırmak yerine Windows Service olarak hizmet edecek şekilde makinemizde konfigürasyon yapmak istiyoruz. Bunun için indirdiğimiz Redis dosyaları içinde konfigürasyon dosyaları mevcut. Dosya dizini aşağıda belirtilmiştir.

Bu dizine Administrator olarak cmd üzerinden gidersek ve redis-server — service-install redis.windows-service.conf — loglevel verbose komutunu çalıştırırsak aşağıdaki gibi işletim sistemimizin “Services” kısmında Redis’i görebilmeliyiz.

Servisimiz kurulduktan sonra ilgili port üzerinden erişim sağlayabiliriz.

Redis .NET üzerinde nasıl kullanılır

Redis’i .NET projesi üzerinde çalıştırmak için aşağıdaki gibi projemize StackExchange.Redis adlı NuGet Package’ı yüklememiz gereklidir.

Sonrasında Redis’in windows makinemiz üzerindeki servisine erişebilmek için eski .NET projelerinde web.config, yeni .NET projelerinde ise appsetting.json dosyamızı solution üzerinden açarak aşağıdaki gibi Redis adresimizi portuyla birlikte eklememiz gerekmektedir.

Sonrasında Redis bağlantısını projemizle kurmak için örnek olarak CacheService isminde bir class oluşturabiliriz.

public class CacheService : ICacheService
{
private IDatabase _db;

public CacheService()
{
ConfigureRedis();
}

private void ConfigureRedis()
{
_db = ConnectionHelper.Connection.GetDatabase();
}

public T GetData<T>(string key)
{
var value = _db.StringGet(key);

if (!string.IsNullOrEmpty(value))
{
return JsonConvert.DeserializeObject<T>(value);
}

return default;
}

public bool SetData<T>(string key, T value, DateTimeOffset expirationTime)
{
TimeSpan expiryTime = expirationTime.DateTime.Subtract(DateTime.Now);

var isSet =_db.StringSet(key, JsonConvert.SerializeObject(value), expiryTime);

return isSet;
}

public object RemoveData(string key)
{
bool _isKeyExist = _db.KeyExists(key);
if (_isKeyExist == true)
{
return _db.KeyDelete(key);
}
return false;
}
}

Bu sınıfta ConfigureRedis() metodu ile Redis servisine bağlanmak için gereken konfigürasyon verimiz okunur. Redis’in yüklediğimiz kendi frameworkü üzerinden aşağıdaki gibi bağlantı kurulur.

 public class ConnectionHelper
{
static ConnectionHelper()
{
ConnectionHelper.lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
return ConnectionMultiplexer.Connect(ConfigurationManager.AppSetting["RedisURL"]);
});
}

private static Lazy<ConnectionMultiplexer> lazyConnection;

public static ConnectionMultiplexer Connection
{
get
{
return lazyConnection.Value;
}
}
}

ConnectionMultiplexer.Connect metodu Redis frameworküne ait bir metoddur. Bağlantı kurulduktan sonra yukarıda belirtilen CacheService classından GetData(), SetData() ve RemoveData() metodları implemente ettiğimiz yere göre referansı olan her yerde kullanılabilir hale gelmektedir.

Sonuç olarak Redis, yüksek performanslı ve ölçeklenebilir bir veritabanı olarak, birçok uygulama tarafından tercih edilen bir araçtır. Özellikle önbellek yönetimi, mesaj kuyrukları, oturum yönetimi ve gerçek zamanlı bildirimler gibi senaryolarda kullanımı oldukça yaygındır. Bununla birlikte, Redis’in bellek sınırlamaları, disk desteğinin sınırlı olması, karmaşık sorgulara uygun olmaması ve öğrenme eğrisinin olması gibi bazı dezavantajları da vardır. Ancak, doğru senaryolarda kullanıldığında, performansı ve ölçeklenebilirliği nedeniyle Redis, geliştiricilerin uygulamalarının performansını ve ölçeklenebilirliğini artırmak için oldukça yararlı bir araçtır.

Referanslar

Can Kayı Mehmet Yürek

--

--