{"id":415,"date":"2022-01-24T23:43:45","date_gmt":"2022-01-24T23:43:45","guid":{"rendered":"https:\/\/okankaradag.com\/?p=415"},"modified":"2022-02-13T21:24:05","modified_gmt":"2022-02-13T21:24:05","slug":"net-6-0-redis-ile-cache-yonetimi","status":"publish","type":"post","link":"https:\/\/okankaradag.com\/en\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi","title":{"rendered":".Net 6.0 and Redis Cache Management"},"content":{"rendered":"<p>Merhaba, bu g\u00f6nderide .net 6.0 ve redis ile cache y\u00f6netiminin nas\u0131l yap\u0131laca\u011f\u0131n\u0131 \u00f6rnek bir proje yaparak inceleyece\u011fiz ve redisle ilgili genel bilgilere bakaca\u011f\u0131z. Projenin linkine en a\u015fa\u011f\u0131dan ula\u015fabilirsiniz.<\/p>\n\n\n\n<h5 id=\"redis-nedir\">Redis Nedir?<\/h5>\n\n\n\n<p>Anahtar &#8211; De\u011fer (Key-value) \u015feklindeki verileri sunucunun belle\u011finde (ram) tutan no-sql veritaban\u0131d\u0131r.<\/p>\n\n\n\n<h5 id=\"kullanim-alanlari\">Kullan\u0131m Alanlar\u0131<\/h5>\n\n\n\n<p>Session Y\u00f6netimi, Pub\/Sub, \u00d6nbellek (Cache) y\u00f6netimi, Rabbitmq benzeri kuyruk y\u00f6netimi (Rabbitmq i\u00e7in <a href=\"https:\/\/okankaradag.com\/en\/rabbitmq\/rabbitmq-nedir-nasil-kurulur-ne-ise-yarar\/\">g\u00f6nderi<\/a>)<\/p>\n\n\n\n<h5 id=\"adimlar\">Ad\u0131mlar<\/h5>\n\n\n\n<ul><li><a data-type=\"internal\" data-id=\"#Redis-Install\" href=\"#Redis-Install\">Redis Kurulumu<\/a><\/li><li><a href=\"#cache-methods\">InMemory Cache ve Disturbed Cache<\/a><\/li><li><a href=\"#asp-net-core\">.Net 6.0 ile \u00d6rnek Proje<\/a><\/li><\/ul>\n\n\n\n<h5 id=\"Redis-Install\">Redis Kurulumu<\/h5>\n\n\n\n<p><strong>Redis <\/strong>ilk ba\u015flarda sadece linux \u00fczerinde \u00e7al\u0131\u015fsa da daha sonra ihtiya\u00e7lar do\u011frultusunda windows s\u00fcr\u00fcm\u00fcne de \u00e7\u0131kt\u0131. \u015eu <a data-type=\"URL\" data-id=\"https:\/\/github.com\/microsoftarchive\/redis\/releases\/download\/win-3.0.504\/Redis-x64-3.0.504.zip\" rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/microsoftarchive\/redis\/releases\/download\/win-3.0.504\/Redis-x64-3.0.504.zip\" target=\"_blank\">link <\/a>\u00fczerinde redisi indirebilirsiniz  \u0130ndirdikten sonra <strong>64bit <\/strong> klas\u00f6r\u00fc i\u00e7erisindeki <strong>redis-server.exe<\/strong>&#8216;yi \u00e7ift t\u0131klay\u0131p redisi \u00e7al\u0131\u015ft\u0131r\u0131n. <strong>Redis <\/strong>art\u0131k kullan\u0131labilir durumda <strong>redis-cli.exe<\/strong> ile redisi test edebiliriz.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/07\/Screenshot_6.png\" alt=\"\" class=\"wp-image-428\" width=\"596\" height=\"373\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/07\/Screenshot_6.png 643w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/07\/Screenshot_6-300x188.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/07\/Screenshot_6-16x10.png 16w\" sizes=\"(max-width: 596px) 100vw, 596px\" \/><figcaption>Redis Client<\/figcaption><\/figure>\n\n\n\n<p>Rediste string, list, hashes gibi baz\u0131 tipler var. \u00dcstteki \u00f6rnek string i\u00e7indi. list ve hash i\u00e7inde ayr\u0131ca yazal\u0131m.<\/p>\n\n\n\n<p> <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"644\" height=\"402\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/07\/redis-client-data-types-1.png\" alt=\"\" class=\"wp-image-430\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/07\/redis-client-data-types-1.png 644w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/07\/redis-client-data-types-1-300x187.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2021\/07\/redis-client-data-types-1-16x10.png 16w\" sizes=\"(max-width: 644px) 100vw, 644px\" \/><\/figure>\n\n\n\n<p>ilk sat\u0131rda yazd\u0131\u011f\u0131m\u0131z <strong>hmset<\/strong> komutu (hash multiset) json gibi string objelerini mapleyerek atama i\u015flemi yap\u0131yor. <strong>user:1<\/strong> ise keyimiz oluyor<\/p>\n\n\n\n<h5 id=\"cache-methods\">InMemoryCache<\/h5>\n\n\n\n<p>Bu y\u00f6ntem ile veriler sadece host edilen web sunucunun belle\u011finde tutulur ve verilerinize sadece host etti\u011finiz uygulama eri\u015febilir ayr\u0131ca sunucunuz kapand\u0131\u011f\u0131nda ya da yeniden ba\u015flad\u0131\u011f\u0131nda veriler silinir. Uygulaman\u0131n tek sunucuda oldu\u011fu durumlar i\u00e7in ideal bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n\n\n\n<h5 id=\"distributed-caching\">Distributed Caching<\/h5>\n\n\n\n<p>Birden \u00e7ok uygulaman\u0131n eri\u015febilece\u011fi bir y\u00f6ntemdir. Redis gibi bir veritaban\u0131nda veriler saklan\u0131r sunucu kapand\u0131\u011f\u0131nda veriler silinmez. Verilere kolayca eri\u015fmeden dolay\u0131 bak\u0131m\u0131 kolay olur. Session gibi ortak cacheler tutulabilir. \u00c7ok sunuculu uygulamalar i\u00e7in idela \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"731\" height=\"332\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/disturbed-cache.png\" alt=\"\" class=\"wp-image-599\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/disturbed-cache.png 731w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/disturbed-cache-300x136.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/disturbed-cache-18x8.png 18w\" sizes=\"(max-width: 731px) 100vw, 731px\" \/><figcaption>docs.microsoft.com&#8217;dan al\u0131nm\u0131\u015ft\u0131r<\/figcaption><\/figure>\n\n\n\n<h5 id=\"asp-net-core\"> .Net Entagrasyonu<\/h5>\n\n\n\n<p>.Net 6.0 Web api projesi a\u00e7ara redisin kullan\u0131m\u0131na bakaca\u011f\u0131z.<\/p>\n\n\n\n<p>Redis ile ilgili nugette bir\u00e7ok paket var <strong>StackExchange.Redis <\/strong>en \u00e7ok tercih edilen paketlerden a\u015fa\u011f\u0131daki komut ile paketi y\u00fckleyelim<\/p>\n\n\n\n<p><strong>Install-Package StackExchange.Redis<\/strong><\/p>\n\n\n\n<p>appsettings.json dosyas\u0131na redisin ba\u011flant\u0131 bilgilerini ekleyelim.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"278\" height=\"223\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-connection-strings.png\" alt=\"\" class=\"wp-image-590\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-connection-strings.png 278w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-connection-strings-15x12.png 15w\" sizes=\"(max-width: 278px) 100vw, 278px\" \/><\/figure>\n\n\n\n<p>Default port 6379 oldu\u011fu i\u00e7in belirtmeye gerek yok.<\/p>\n\n\n\n<p><strong>Program.cs <\/strong>a\u015fa\u011f\u0131daki eklemeleri yapal\u0131m<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">IConfiguration configuration = builder.Configuration;\nvar multiplexer = ConnectionMultiplexer.Connect(configuration.GetConnectionString(\"Redis\"));\nbuilder.Services.AddSingleton&lt;IConnectionMultiplexer&gt;(multiplexer);<\/pre><\/div>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><\/div>\n\n\n\n<p>Services klas\u00f6r\u00fc olu\u015ftural\u0131m ve <strong>ICacheService <\/strong>Ekleyelim<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">public interface ICacheService\n{\n    Task&lt;string&gt; GetValueAsync(string key);\n    Task&lt;bool&gt; SetValueAsync(string key, string value);\n    Task&lt;T&gt; GetOrAddAsync&lt;T&gt;(string key, Func&lt;Task&lt;T&gt;&gt; action) where T : class;\n    T GetOrAdd&lt;T&gt;(string key, Func&lt;T&gt; action) where T : class;\n    Task Clear(string key);\n    void ClearAll();\n}<\/pre><\/div>\n\n\n\n<p>GetOrAdd fonksiyonu ile cache&#8217;den veri \u00e7ekti\u011fimizde veri null ise ayn\u0131 zamanda set i\u015flemini de yap\u0131yoruz b\u00f6ylece kod tekrar\u0131 yapm\u0131yoruz.<\/p>\n\n\n\n<p>RedisCacheService ad\u0131ndan bir class olu\u015fturup ICacheService&#8217;den miras alal\u0131m.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">public class RedisCacheService : ICacheService\n{\n    private readonly IConnectionMultiplexer _redisCon;\n    private readonly IDatabase _cache;\n    private TimeSpan ExpireTime =&gt; TimeSpan.FromDays(1);\n\n    public RedisCacheService(IConnectionMultiplexer redisCon)\n    {\n        _redisCon = redisCon;\n        _cache = redisCon.GetDatabase();\n    }\n\n    public async Task Clear(string key)\n    {\n        await _cache.KeyDeleteAsync(key);\n    }\n\n    public void ClearAll()\n    {\n        var endpoints = _redisCon.GetEndPoints(true);\n        foreach (var endpoint in endpoints)\n        {\n            var server = _redisCon.GetServer(endpoint);\n            server.FlushAllDatabases();\n        }\n    }\n\n    public async Task&lt;T&gt; GetOrAddAsync&lt;T&gt;(string key, Func&lt;Task&lt;T&gt;&gt; action) where T : class\n    {\n        var result = await _cache.StringGetAsync(key);\n        if (result.IsNull)\n        {\n            result = JsonSerializer.SerializeToUtf8Bytes(await action());\n            await SetValueAsync(key, result);\n        }\n        return JsonSerializer.Deserialize&lt;T&gt;(result);\n    }\n\n    public async Task&lt;string&gt; GetValueAsync(string key)\n    {\n        return await _cache.StringGetAsync(key);\n    }\n\n    public async Task&lt;bool&gt; SetValueAsync(string key, string value)\n    {\n        return await _cache.StringSetAsync(key,value, ExpireTime);\n    }\n\n    public T GetOrAdd&lt;T&gt;(string key, Func&lt;T&gt; action) where T : class\n    {\n        var result =  _cache.StringGet(key);\n        if (result.IsNull)\n        {\n            result = JsonSerializer.SerializeToUtf8Bytes(action());\n            _cache.StringSet(key, result,ExpireTime);\n        }\n        return JsonSerializer.Deserialize&lt;T&gt;(result);\n    }\n}<\/pre><\/div>\n\n\n\n<p>Bu servisde en \u00e7ok kullanaca\u011f\u0131m\u0131z <strong>GetorAdd()<\/strong> fonksiyonu ana i\u015flemlerimizi nerdeyse tek i\u015flemde yap\u0131yor.<br>Ayr\u0131ca 1 g\u00fcn olarak da expire s\u00fcresi de belirledik bu s\u00fcre bitince key silinecek.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-style-default\"><p>Cache de\u011ferini serilize ederken JsonSerializer.SerializeToUtf8Bytes kullan\u0131rsan\u0131z t\u00fcrk\u00e7e karekterler unicode olarak kaydedilir Serialize() de ise t\u00fcrk\u00e7e karakterleri parse edip kaydeder.<\/p><\/blockquote>\n\n\n\n<p>ICacheService&#8217;in ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 ekleyelim<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">builder.Services.AddSingleton&lt;ICacheService, RedisCacheService&gt;();\n<\/pre><\/div>\n\n\n\n<p>CacheController ekliyip bir endpoint \u00fczerinden redise veri at\u0131p \u00e7ekelim<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">[ApiController]\n[Route(\"api\")]\npublic class CacheController : ControllerBase\n{\n    private readonly ICacheService _cacheService;\n\n    public CacheController(ICacheService cacheService)\n    {\n        _cacheService = cacheService;\n    }\n    [HttpPost(\"cache\/{key}\")]\n    public async Task&lt;IActionResult&gt; Get(string key)\n    {\n        return Ok(await _cacheService.GetValueAsync(key));\n    }\n   \n    [HttpPost(\"cache\")]\n    public async Task&lt;IActionResult&gt; Post([FromBody] CacheRequestModel model)\n    {\n        await _cacheService.SetValueAsync(model.Key, model.Value);\n        return Ok();\n    }\n    [HttpDelete(\"cache\/{key}\")]\n    public async Task&lt;IActionResult&gt; Delete(string key)\n    {\n        await _cacheService.Clear(key);\n        return Ok();\n    }\n}<\/pre><\/div>\n\n\n\n<p><strong>CacheRequestModel<\/strong>.<strong>cs<\/strong><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">public class CacheRequestModel\n{\n    public string Key { get; set; }\n    public string Value { get; set; }\n}<\/pre><\/div>\n\n\n\n<p>Swagger ya da postman \u00fczerinden testi ger\u00e7ekle\u015ftirebiliriz. ayr\u0131ca yukar\u0131da belirtti\u011fim linkten redis-cli.exe yi de a\u00e7\u0131p verileri inceleyebiliriz.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"227\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-post-1024x227.png\" alt=\"\" class=\"wp-image-596\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-post-1024x227.png 1024w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-post-300x66.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-post-768x170.png 768w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-post-18x4.png 18w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-post.png 1394w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Redis Post (body)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"322\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-get-1024x322.png\" alt=\"\" class=\"wp-image-597\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-get-1024x322.png 1024w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-get-300x94.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-get-768x242.png 768w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-get-18x6.png 18w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-get.png 1192w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Postman Redis Get<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-cli-get.png\" alt=\"\" class=\"wp-image-598\" width=\"311\" height=\"105\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-cli-get.png 339w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-cli-get-300x101.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/redis-cli-get-18x6.png 18w\" sizes=\"(max-width: 311px) 100vw, 311px\" \/><figcaption>Redis-Cli.exe<\/figcaption><\/figure>\n\n\n\n<p>\u015eimdi de GetOrAdd fonksiyonumuzu kullanal\u0131m. \u00d6rne\u011fin bir kategorilerimiz olsun <strong>category\/getall<\/strong> \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z zaman \u00f6nce cache&#8217;den almay\u0131 deneyecek e\u011fer yoksa sorgumuz \u00e7al\u0131\u015facak cache&#8217;e ekleyecek ve sorgu d\u00f6necek.<\/p>\n\n\n\n<p>Category i\u015flemlerimizi yapacak ICategoryService olu\u015ftural\u0131m<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">public interface ICategoryService\n{\n    List&lt;CategoryModel&gt; GetAllCategory();\n}<\/pre><\/div>\n\n\n\n<p><strong>CategoryService.cs<\/strong><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:default decode:true\">public class CategoryService : ICategoryService\n{\n    static List&lt;CategoryModel&gt; categories =&gt; new()\n    {\n        new CategoryModel { Id = 1, Name = \"Electronic\" },\n        new CategoryModel { Id = 2, Name = \"Clothes\" }\n    };\n\n    public ICacheService CacheService { get; }\n\n    public CategoryService(ICacheService cacheService)\n    {\n        CacheService = cacheService;\n    }\n    public List&lt;CategoryModel&gt; GetAllCategory()\n    {\n        return GetCategoriesFromCache();\n    }\n    private List&lt;CategoryModel&gt; GetCategoriesFromCache()\n    {\n        return CacheService.GetOrAdd(\"allcategories\", () =&gt; { return categories; });\n    }\n}<\/pre><\/div>\n\n\n\n<p>GetOrAdd fonksiyonunda iki parametre var ilki keyin ismi (string) di\u011feri de bir delegate (Func&lt;T&gt;)<\/p>\n\n\n\n<p><strong>CategoryModel.cs<\/strong><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">public class CategoryModel\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n}<\/pre><\/div>\n\n\n\n<p><strong>CategoryController<\/strong> ile de endpointimizi olu\u015ftural\u0131m<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">[Route(\"api\")]\n[ApiController]\npublic class CategoryController : ControllerBase\n{\n    private readonly ICategoryService _categoryService;\n\n    public CategoryController(ICategoryService categoryService)\n    {\n        _categoryService = categoryService;\n    }\n    [HttpGet(\"category\/getall\")]\n    public  IActionResult GetAll()\n    {\n        return Ok(_categoryService.GetAllCategory());\n    }\n}\n<\/pre><\/div>\n\n\n\n<p>Testimizi yapal\u0131m.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"299\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/category-getall-request-1024x299.png\" alt=\"\" class=\"wp-image-600\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/category-getall-request-1024x299.png 1024w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/category-getall-request-300x88.png 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/category-getall-request-768x225.png 768w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/category-getall-request-18x5.png 18w, https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/category-getall-request.png 1402w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h5 id=\"data-consistency-veri-tutarliligi\">Data Consistency (Veri Tutarl\u0131l\u0131\u011f\u0131)<\/h5>\n\n\n\n<p>Verilerde tutarl\u0131l\u0131\u011f\u0131 sa\u011flamak i\u00e7in <strong>cache&#8217;de tutulan veri de\u011fi\u015fti\u011finde ya direkt g\u00fcncellemeliyiz<\/strong> ya da keyi silmeliyiz \u00f6rne\u011fin kategorilere bir ekleme yapt\u0131\u011f\u0131m\u0131z zaman cache&#8217;deki veriyi g\u00fcncellemezsek bir veri tutars\u0131zl\u0131\u011f\u0131 ortaya \u00e7\u0131kar.<\/p>\n\n\n\n<p>Project url : <a href=\"https:\/\/github.com\/okankrdg\/RedisSample\" target=\"_blank\" rel=\"noreferrer noopener\">github.com\/okankrdg\/RedisSample<\/a><\/p>\n\n\n\n<p>Bu g\u00f6nderinin sonuna geldik Ho\u015f\u00e7akal\u0131n \ud83d\ude42<\/p>","protected":false},"excerpt":{"rendered":"<p>In this post, We're going to do cache management using .net 6.0, redis and StackExchange library and for all that we're going to learn at redis.<\/p>","protected":false},"author":1,"featured_media":657,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[87,40,17,86],"tags":[90,56,89,88],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>.Net 6.0 ve Redis ile Cache Y\u00f6netimi - Okan Karada\u011f<\/title>\n<meta name=\"description\" content=\"Bu g\u00f6nderide .net 6.0 web api, redis ve stackexchange k\u00fct\u00fcphanesi ile cache y\u00f6netimi yapaca\u011f\u0131z ve redis hakk\u0131nda temel bilgileri \u00f6\u011frenece\u011fiz.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/okankaradag.com\/en\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\".Net 6.0 ve Redis ile Cache Y\u00f6netimi - Okan Karada\u011f\" \/>\n<meta property=\"og:description\" content=\"Bu g\u00f6nderide .net 6.0 web api, redis ve stackexchange k\u00fct\u00fcphanesi ile cache y\u00f6netimi yapaca\u011f\u0131z ve redis hakk\u0131nda temel bilgileri \u00f6\u011frenece\u011fiz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/okankaradag.com\/en\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Okan Karada\u011f\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-24T23:43:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-02-13T21:24:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/database2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"375\" \/>\n\t<meta property=\"og:image:height\" content=\"250\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Okan Karada\u011f\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Okan Karada\u011f\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi#article\",\"isPartOf\":{\"@id\":\"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi\"},\"author\":{\"name\":\"Okan Karada\u011f\",\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\"},\"headline\":\".Net 6.0 ve Redis ile Cache Y\u00f6netimi\",\"datePublished\":\"2022-01-24T23:43:45+00:00\",\"dateModified\":\"2022-02-13T21:24:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi\"},\"wordCount\":667,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\"},\"keywords\":[\".net 6.0\",\"asp.net core\",\"cache\",\"redis\"],\"articleSection\":[\".Net 6.0\",\"Asp.Net Core\",\"C#\",\"Redis\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi\",\"url\":\"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi\",\"name\":\".Net 6.0 ve Redis ile Cache Y\u00f6netimi - Okan Karada\u011f\",\"isPartOf\":{\"@id\":\"https:\/\/okankaradag.com\/#website\"},\"datePublished\":\"2022-01-24T23:43:45+00:00\",\"dateModified\":\"2022-02-13T21:24:05+00:00\",\"description\":\"Bu g\u00f6nderide .net 6.0 web api, redis ve stackexchange k\u00fct\u00fcphanesi ile cache y\u00f6netimi yapaca\u011f\u0131z ve redis hakk\u0131nda temel bilgileri \u00f6\u011frenece\u011fiz.\",\"breadcrumb\":{\"@id\":\"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/okankaradag.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\".Net 6.0 ve Redis ile Cache Y\u00f6netimi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/okankaradag.com\/#website\",\"url\":\"https:\/\/okankaradag.com\/\",\"name\":\"Okan Karada\u011f\",\"description\":\"Programlama \u00dczerine\",\"publisher\":{\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/okankaradag.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\",\"name\":\"Okan Karada\u011f\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g\",\"caption\":\"Okan Karada\u011f\"},\"logo\":{\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/okankaradag.com\"],\"url\":\"https:\/\/okankaradag.com\/en\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":".Net 6.0 ve Redis ile Cache Y\u00f6netimi - Okan Karada\u011f","description":"Bu g\u00f6nderide .net 6.0 web api, redis ve stackexchange k\u00fct\u00fcphanesi ile cache y\u00f6netimi yapaca\u011f\u0131z ve redis hakk\u0131nda temel bilgileri \u00f6\u011frenece\u011fiz.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/okankaradag.com\/en\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi\/","og_locale":"en_US","og_type":"article","og_title":".Net 6.0 ve Redis ile Cache Y\u00f6netimi - Okan Karada\u011f","og_description":"Bu g\u00f6nderide .net 6.0 web api, redis ve stackexchange k\u00fct\u00fcphanesi ile cache y\u00f6netimi yapaca\u011f\u0131z ve redis hakk\u0131nda temel bilgileri \u00f6\u011frenece\u011fiz.","og_url":"https:\/\/okankaradag.com\/en\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi\/","og_site_name":"Okan Karada\u011f","article_published_time":"2022-01-24T23:43:45+00:00","article_modified_time":"2022-02-13T21:24:05+00:00","og_image":[{"width":375,"height":250,"url":"https:\/\/okankaradag.com\/wp-content\/uploads\/2022\/01\/database2.jpg","type":"image\/jpeg"}],"author":"Okan Karada\u011f","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Okan Karada\u011f","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi#article","isPartOf":{"@id":"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi"},"author":{"name":"Okan Karada\u011f","@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52"},"headline":".Net 6.0 ve Redis ile Cache Y\u00f6netimi","datePublished":"2022-01-24T23:43:45+00:00","dateModified":"2022-02-13T21:24:05+00:00","mainEntityOfPage":{"@id":"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi"},"wordCount":667,"commentCount":0,"publisher":{"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52"},"keywords":[".net 6.0","asp.net core","cache","redis"],"articleSection":[".Net 6.0","Asp.Net Core","C#","Redis"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi#respond"]}]},{"@type":"WebPage","@id":"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi","url":"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi","name":".Net 6.0 ve Redis ile Cache Y\u00f6netimi - Okan Karada\u011f","isPartOf":{"@id":"https:\/\/okankaradag.com\/#website"},"datePublished":"2022-01-24T23:43:45+00:00","dateModified":"2022-02-13T21:24:05+00:00","description":"Bu g\u00f6nderide .net 6.0 web api, redis ve stackexchange k\u00fct\u00fcphanesi ile cache y\u00f6netimi yapaca\u011f\u0131z ve redis hakk\u0131nda temel bilgileri \u00f6\u011frenece\u011fiz.","breadcrumb":{"@id":"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/okankaradag.com\/asp-net\/asp-net-core\/net-6-0-redis-ile-cache-yonetimi#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/okankaradag.com\/"},{"@type":"ListItem","position":2,"name":".Net 6.0 ve Redis ile Cache Y\u00f6netimi"}]},{"@type":"WebSite","@id":"https:\/\/okankaradag.com\/#website","url":"https:\/\/okankaradag.com\/","name":"Okan Karada\u011f","description":"Programlama \u00dczerine","publisher":{"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/okankaradag.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52","name":"Okan Karada\u011f","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/okankaradag.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g","caption":"Okan Karada\u011f"},"logo":{"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/okankaradag.com"],"url":"https:\/\/okankaradag.com\/en\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts\/415"}],"collection":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/comments?post=415"}],"version-history":[{"count":21,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts\/415\/revisions"}],"predecessor-version":[{"id":656,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts\/415\/revisions\/656"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/media\/657"}],"wp:attachment":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/media?parent=415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/categories?post=415"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/tags?post=415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}