Redis Yazı Serisi 13 – Asp.NET Core’de Session İçin Redis Cache Kullanımı

Merhaba,

Bir web uygulamasının yayınlandığı host üzerinde oluşturulan sessionların uygulama yeniden başlatıldığı durumlarda kaybolması kaçınılmazdır. Bu durum belleğin temizlenmesi açısından iyiye alamet olarak yorumlanabilsede esasında session’daki verilerin kaybı söz konusu olacağından dolayı pekte istenilen bir durum olmasa gerek. Dolayısıyla böyle bir ahvale istinaden sessionların in-memory’de tutulmasından kaçınılması ve herhangi bir distributed memory’de depolanması her açıdan daha tercih edilebilir gözükmektedir.

Bizler bu içeriğimizde Asp.NET Core uygulamalarında session’ların distributed cache olarak Redis server’da nasıl storage edilebileceğini inceleyeceğiz. Bunun için herhangi bir Asp.NET Core uygulamasına Microsoft.Extensions.Caching.Redis kütüphanesinin dahil edilmesi gerekmektedir.

İlgili kütüphaneyi yükledikten sonra ‘Startup.cs’ dosyasında aşağıdaki gibi entegrasyonun yapılması gerekmektedir.

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            .
            .
            .
            services.AddDistributedRedisCache(options =>
            {
                options.InstanceName = "session";
                options.Configuration = "localhost:1453";
            });
            services.AddSession(options => options.IdleTimeout = TimeSpan.FromMinutes(20));
            .
            .
            .
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            .
            .
            .
            app.UseSession();
            .
            .
            .
        }
    }

Yukarıdaki kod bloğunu incelersek eğer 8. satırda ‘AddDistributedRedisCache’ metodu ile session’ların hangi Redis server’da tutulacağına dair gerekli konfigürasyonlar yapılmaktadır. 13. satırda ise session servisi eklenmekte ve 24. satırda middleware olarak devreye sokulmaktadır.

Bu entegrasyonlar neticesinde uygulamada kullanılan tüm session’lar direkt olarak Redis sunucusunda cache edilecektirler. Böylece uygulamanın herhangi bir sebepten dolayı kapanması yahut aksaması üretilen sessionların silinmesini engelleyeceği gibi bir yandan da uygulamanın belleğini işgal etmeyecekleri için performansı düşürüp maliyeti arttırmayacaktır.

    public class RedisController : Controller
    {
        public IActionResult RedisSessionSet()
        {
            HttpContext.Session.Set("name", Encoding.UTF8.GetBytes("Gençay Yıldız"));
            return View();
        }
        public IActionResult RedisSessionGet()
        {
            if (HttpContext.Session.TryGetValue("name", out byte[] value))
                Console.WriteLine(Encoding.UTF8.GetString(value));
            return View();
        }
    }

Redis Yazı Serisi 13 - Asp.NET Core'de Session İçin Redis Cache Kullanımı

Görüldüğü üzere session bilgileri hedef Redis sunucusunda başarıyla tutulmaktadır.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. Efsa dedi ki:

    Merhaba.Öncelikle öğrendiklerinizi kaliteli bir biçimde bizlerle paylaştığınız için teşekkür ederim herkes adına. Soruma gelirsek :
    Paylaşımlı bir hosting satın aldık diyelim.Localde geliştirme yaparken redisi kurduk
    peki canlıya alırken uygulamamızı derleyip attık. Redisi sunucuya da kurmamız gerekmiyor mu ? Yani dedicated bir sunucumuz olmadan paylaşımlı hostingimize redisi kuramaz mıyız ? Yazdığımız redis kodları çalışmaz mı ?
    Biraz saçma bi soru olmuş olabilir ama aydınlanmak isterim 😀 Teşekkürler.

    • Gençay dedi ki:

      Merhaba,

      Amazon yahut Azure gibi cloud sistemlerden Redis sunucuları ayağa kaldırmanız gerekecektir 🙂 Ardından uygulamanızla ilgili sunuculara bağlantı kurup ilişkilendirebilirsiniz.

      İyi çalışmalar…

  1. 20 Nisan 2020

    […] Redis Yazı Serisi 13 – Asp.NET Core’de Session İçin Redis Cache Kullanımı […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*