.NET Core’da cache kullanımları #2 Distributed Cache
Distributed cache , birden çok web uygulaması tarafından paylaşılan uygulamalar için verilerin önbellekte tutulmasını sağlar. Önbellekteki bilgiler tek tek web sunucularının belleğinde saklanmak yerine harici bir hizmette saklanır ve tüm sunucular tarafından kullanılabilir duruma gelir. Uygulamalar restart edildikten sonra veya yeni versiyon çıkıldıktan sonra da cacheteki bilgiler geçerli kalmaya devam eder.
Cache ile ilgili daha çok bilgi almak ve .NET Core’daki diğer cache kullanımlarını incelemek için, serinin diğer yazılarına aşağıdaki linklerden ulaşabilirsiniz.
- .NET Core’da cache kullanımları #1 InMemory Cache
- .NET Core’da cache kullanımları #2 Distributed Cache
- .NET Core’da cache kullanımları #3 Response Cache
.NET Core’da IDistributedCache interface’i basit olarak cache’e ekleme silme güncelleme gibi işlemleri yapan bir arayüz sunar. Bu metotları hem async hem de sync olarak kullanabilirsiniz.
.NET Core’da IDistributedCache interface ile kullanabileceğiniz cache tipleri şu şekildedir.
Distributed Memory Cache
Distributed Memory Cache tam manasıyla bir distributed cache değildir, cachedeki bilgiler uygulamanın çalıştığı sunucuda tutulur. Testlerde ve tek sunuculu uygulamalarda kullanımı uygundur.
Distributed SQL Cache
Cacheteki bilgileri sql server’da bir tabloda tutulmasını sağlar.Bu tabloyu sql-cache komutu ile oluşturabilirsiniz.
Örnek komut:
dotnet sql-cache create "connection string" "schema" "table"
Komut başarıyla çalıştırdıktan sonra ilgili veritabanında oluşturulan tablonun şeması aşağıdaki gibidir.
Distributed NCache
NCache, .NET ve .NET Core’da çalışabilen açık kaynaklı, bir distributed cache sistemidir. Daha detaylı bilgi için burayı inceleyebilirsiniz
Distributed Redis Cache
Redis hızlı çalışan , verileri key -value olarak bellekte tutan açık kaynak veri deposudur. Redis veritabanı,cache,session storage vb şekillerde olarak kullanılabilir.
Şimdi örnek bir projede redis’i nasıl kullanacağımızı inceleyelim.
Öncelikle kurulum için redis’i docker üzerinden ayağa kaldıralım.
docker pull redis
docker run -p 6379:6379 redis
Redis’i kendi makinenizde kurup test etmek için burayı inceleyebilirsiniz, ayrıca heroku, azure gibi platformlardan da hızlıca kurulum sağlayabilirsiniz
Kurulumu sağladıktan sonra projemize Microsoft.Extensions.Caching.Redis paketini ekleyelim ardından Startup.cs üzerinde ConfigureService metoduna aşağıdaki kod bloğunu ekleyelim.
services.AddDistributedRedisCache(options =>{
options.Configuration = "localhost";
options.InstanceName = "SampleInstance";
});
Şimdi bir controller içinde örnek bir kullanım yapalım.
Artık ilgili sayfaya istekte bulunduğumuzda cache’a atadığımız değeri görebiliriz.
Redisteki değerleri görüntüleyebilmek için Redis Desktop Manager‘ı kullanabilirsiniz. Ücretli olan bu uygulamanın alternatifi olarak Redis Commander’ı docker üzerinden veya npm üzerinden kurulum sağlayarak kullanabilirsiniz.
RedisCommander docker kurulumu için;
docker pull rediscommander/redis-commander
docker run -p 8081:8081 rediscommander/redis-commander:latest
Ardından localhost:8081 adresinden arayüze erişebilirsiniz.
Bu yazıda .Net Core’da distributed cache yapılarını ve kullanım senaryolarını anlatmaya çalıştım.Anlatımda bir hata olduğunu düşünüyorsanız lütfen yorum yapmaktan çekinmeyin. Umarım faydalı yazı olmuştur. Bir sonraki yazıda görüşmek üzere.
Github : https://github.com/gktnkrdg/netcore-cache-examples
Kaynaklar
[1]https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed?view=aspnetcore-2.2
[2]https://docs.microsoft.com/en-us/aspnet/core/performance/caching/response?view=aspnetcore-2.2
[4]http://www.binaryintellect.net/articles/c4f46271-c889-44ef-9b78-c062dc3ed3de.aspx
[5]https://aspnetcore.readthedocs.io/en/stable/performance/caching/distributed.html
[6]https://www.blexin.com/en-US/Article/Blog/Distributed-cache-in-ASPNET-Core-53