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...

1 Cevap

  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

*