.Net Session Provider İçin Redis Kullanma

.Net web projesi geliştirdiğimizde projenin webconfig dosyasında bir değişiklik yaptığımızda, projeyi yeniden derlediğimizde yada application pool’u yeniden başlattığımızda varolan session’ların yok olması bazen istemediğimiz durumdur örnek oturum bilgilerinin sadece session’da tutulduğunu varsayalım ve her session yenilenmesinde yeniden oturum açmak veya bazı seçimleri tekrar tekrar yapmak can sıkıcı olabiliyor. İşte bu noktada session provider’ımızı ayırmak için no-sql çözümlerinden biri olan redis’i session provider olarak nasıl kullanabileceğimiz noktasına değineceğiz.

.Net Session Provider İçin Redis Kullanma

.Net web projeniz için redis session provider’ı desteği kazandırmak için Microsoft.Web.RedisSessionStateProvider adlı nuget paketini yüklemelisiniz.

Install-Package Microsoft.Web.RedisSessionStateProvider
GET https://api.nuget.org/v3/registration3-gz-semver2/microsoft.web.redissessionstateprovider/index.json
OK https://api.nuget.org/v3/registration3-gz-semver2/microsoft.web.redissessionstateprovider/index.json 621ms
Restoring packages for C:\Users\MSIGB72B\Documents\Visual Studio 2017\Projects\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj…
GET https://api.nuget.org/v3-flatcontainer/microsoft.web.redissessionstateprovider/index.json
OK https://api.nuget.org/v3-flatcontainer/microsoft.web.redissessionstateprovider/index.json 708ms
GET https://api.nuget.org/v3-flatcontainer/microsoft.web.redissessionstateprovider/2.2.6/microsoft.web.redissessionstateprovider.2.2.6.nupkg
OK https://api.nuget.org/v3-flatcontainer/microsoft.web.redissessionstateprovider/2.2.6/microsoft.web.redissessionstateprovider.2.2.6.nupkg 171ms
Installing System.Security.Principal.Windows 4.0.0.
Installing System.Net.NameResolution 4.0.0.
Installing Microsoft.Web.RedisSessionStateProvider 2.2.6.
Installing NuGet package Microsoft.Web.RedisSessionStateProvider 2.2.6.
Committing restore…
Writing lock file to disk. Path: C:\Users\MSIGB72B\Documents\Visual Studio 2017\Projects\ConsoleApp1\ConsoleApp1\obj\project.assets.json
Restore completed in 5,79 sec for C:\Users\MSIGB72B\Documents\Visual Studio 2017\Projects\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj.
Successfully installed ‘Microsoft.Web.RedisSessionStateProvider 2.2.6’ to ConsoleApp1
Successfully installed ‘runtime.native.System.IO.Compression 4.1.0’ to ConsoleApp1
Successfully installed ‘StackExchange.Redis.StrongName 1.2.1’ to ConsoleApp1
Successfully installed ‘System.Diagnostics.Tools 4.0.1’ to ConsoleApp1
Successfully installed ‘System.IO.Compression 4.1.0’ to ConsoleApp1
Successfully installed ‘System.Threading.Timer 4.0.1’ to ConsoleApp1
Executing nuget actions took 1,7 sec
Time Elapsed: 00:00:11.6784093

Redis Session State Provider’ paketinin StackExchange.Redis.StrongName adında bir paket bağımlılığı yer alıyor. Eğer bu paket projenizde yoksa bağımlılıkdan dolayı yüklenir.

Paketi kurmanıza rağmen eğer alttaki gibi bir hata alırsanız StackExchange.Redis.StrongName nuget paketini güncellemelisiniz. Paketin kendi dökümanında eğer redis için StackExchange.Redis adlı paketini kullanıyorsanız bu paketi silip daha sonra sessio state provider’ı yüklemeniz öneriliyor.

Could not load file or assembly ‘StackExchange.Redis.StrongName, Version=1.0.316.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46’ or one of its dependencies. The system cannot find the file specified.

Ayrıca nuget paket kurulumu tamamlandıktan sonra web config’e alttakine benzer satırlar eklenecek. MySessionStateStore name’ine sahip sessionState etiketi altındaki providers etiketi altında yer alan add etiketinin attribute’lerinden bazılarında değişiklik yaptık bu değerler ssl değeri default olaral true geliyor biz bunu false yaptık ve port attribute’ü default’da gelmiyor ve default port değeri 6380 ama biz 6379 yapıyoruz. Eğer özel bir ayarlama yapmadıysanız kurduğunuz redis servisi portu 6379 olarak ayarlamış olacaktır ama siz özel bir port belirlediyseniz redis servisi için bu attribute değerinede ayarladığınız portu girmelisiniz.

Paket kurulumunu .net web projemize yaptıktan sonra redis eğer bilgisayarınızda yoksa o zaman github.com/MSOpenTech/redis/releases adresinden redis kurulum dosyasını indirip gerekli kurulumu yapmalısınız. Yükleme işini isterseniz windows paket yöneticilerinden biri olan Chocolatey üzerinden yüklemek isterseniz alttaki komutu Command Line Interface kullanarak yükleme yapabilirsiniz.

choco install redis-64

Yükleyeceğiniz bu paket ile bilgisayarınızda herhangi bir arayüze sahip redis aracı bulamayacaksınız sadece işlemlerin CLI üzerinde yürütülebilmesine yardımcı olan bir tool ve bir windows servis kurulduğunu göreceksiniz.

Altta windows servis’e ait örnek görüntüye ulaşabilirsiniz.

Kuracağınız redis server aracı ile makinenize kurulacak olan servis.

Kurulumu yaptıktan sonra servisin çalışığ çalışmadığını cli üzerinden kontrol etmek için redis-server yazıp alttaki gibi örnek çıktıya ulaşabilirsiniz bu çıktıda hangi versiyon redis kurulumu yapıldığı redis-server’ın o anki durumu(başlamış olup olmadığı) redis portunu öğrenebilirsiniz örnek çıktı altta yer almaktadır.

MSIGB72B@DESKTOP-SPM3MT4 C:\Users\MSIGB72B
 redis-server
[5272] 20 May 01:50:34.040 # Warning: no config file specified, using the default config. In order to specify a config file use C:\ProgramData\chocolatey\lib\redis-64\redis-server.exe /path/to/redis.conf
                _._
           _.-“__ ”-._
      _.-“    `.  `_.  ”-._           Redis 3.0.503 (00000000/0) 64 bit
  .-“ .-“`.  “`\/    _.,_ ”-._
 (    ‘      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-…-` __…-.“-._|’` _.-‘|     Port: 6379
 |    `-._   `._    /     _.-‘    |     PID: 5272
  `-._    `-._  `-./  _.-‘    _.-‘
 |`-._`-._    `-.__.-‘    _.-‘_.-‘|
 |    `-._`-._        _.-‘_.-‘    |           http://redis.io
  `-._    `-._`-.__.-‘_.-‘    _.-‘
 |`-._`-._    `-.__.-‘    _.-‘_.-‘|
 |    `-._`-._        _.-‘_.-‘    |
  `-._    `-._`-.__.-‘_.-‘    _.-‘
      `-._    `-.__.-‘    _.-‘
          `-._        _.-‘
              `-.__.-‘
 
[5272] 20 May 01:50:34.045 # Server started, Redis version 3.0.503
[5272] 20 May 01:50:34.046 * The server is now ready to accept connections on port 6379

Redis key-value yönetimini gui aracı üzerinden yapmak için piyasada kullanabileceğiniz çok fazla tool var ama ben size en basit tool ve ücretsiz olması dolayısıyla Redis Desktop Manager adlı tool’u önericem bu tool’a https://redisdesktop.com/download adresinden ulaşabilirsiniz.

Redis Desktop Manager’ı indirdikten sonra ve makale başındaki redis servis uygulamasını kurduysanız alttaki gibi bağlantı testini başarıyla geçmeniz ve varsayılan olarak gelen veritabanları boş şekilde(ilk defa kuruyorsanız) listelenecektir.

İlgili redis servisini ve GUI tool üzerinden redis veritabanı işlemlerini yapmak için Redis Desktop Manager tool’unu kurduk son olarak .Net ortamına ait ayalarmaları yaptık peki .Net’de redis session’ı nasıl kullanacağız verileri redis’e nasıl atacağız attığımız farklı formattaki veriler redis üzerinde nasıl tutuluyor bunları görebilmek için hemen kod örneklerine geçelim.

Gördüğünüz gibi normal Session kullanımından hiçbir farkı yok sadece şöyle bir durum sözkonusu Session’a aktaracağınız değer List ve City değerlerinde olduğu gibi class liste v.b. complex veriler ise o zaman bu class’ları SerializableAttribute ile işaretlemelisiniz yoksa hata alacaksınızdır.

Session’a set ettiğimiz bu değerlerin Redis Desktop Manager’dan nasıl gözüktüğüne bakalım.

Gördüğünüz gibi db0 altında HomeController Index action’ında ayarladığımız değerlerin yer aldığını görüyoruz. Eğer db0 değilde diğer db’lerden birini kullanmak isterseniz Web.config’de session provider etiketinin databaseId attribute’üne 0-15 arası değer girmelisiniz hangi db’yi kullanacaksanız default 0 örnek resimdede görebileceğiniz gibi.

.Net Session Provider İçin Redis Kullanma
5 (100%) 3 oy

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.