{"id":28260,"date":"2019-09-25T00:00:00","date_gmt":"2019-09-24T22:00:00","guid":{"rendered":"https:\/\/blexin.com\/cache-distribuita-in-asp-net-core\/"},"modified":"2021-05-21T19:59:10","modified_gmt":"2021-05-21T17:59:10","slug":"distributed-cache-in-asp-net-core","status":"publish","type":"post","link":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/","title":{"rendered":"Distributed cache in ASP.NET Core"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"28248\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/attachment\/1126dea7-099f-4191-b18b-c3691cd34b47-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"1126dea7-099f-4191-b18b-c3691cd34b47\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-28248\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In the previous&nbsp;<a href=\"https:\/\/www.blexin.com\/en-US\/Article\/Blog\/In-memory-caching-in-ASPNET-Core-45\" target=\"_blank\" rel=\"noreferrer noopener\">article<\/a>, I explained how to manage the caching in an ASP.NET Core application, using the&nbsp;<em><strong>in-memory caching<\/strong><\/em>. It\u2019s possible to use this type of caching if your application is hosted on a single server. Which are instead the tools that the .NET Core framework makes available to make caching in a distributed scenario, as&nbsp;in-cloud?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">IDistributedCache Interface<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The framework makes available this interface:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic interface IDistributedCache\n{\n\u00a0\u00a0\u00a0\u00a0byte&#x5B;] Get(string key);\n\u00a0\u00a0\u00a0\u00a0Task &lt;byte&#x5B;]&gt; GetAsync(string key);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0void Set(string key, byte&#x5B;] value, DistributedCacheEntryOptions options);\n\u00a0\u00a0\u00a0\u00a0Task SetAsync(string key, byte&#x5B;] value, DistributedCacheEntryOptions options);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0void Refresh(string key);\n\u00a0\u00a0\u00a0\u00a0Task RefreshAsync(string key);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0void Remove(string key);\n\u00a0\u00a0\u00a0\u00a0Task RemoveAsync(string key);\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If you remember the interface used in the previous article (<strong>IMemoryCache<\/strong>), you may note some similarity, but even many differences, as:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Async methods<\/li><li>Refresh methods (to update cache keys, without asking for data)<\/li><li>Byte-based and not object-based methods<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft provides 3 implementations so far: one is&nbsp;<strong>in-memory<\/strong>&nbsp;and it\u2019s mainly used in the development stage of an application, the second one is on&nbsp;<strong>SQL server<\/strong>&nbsp;and the last one is based on&nbsp;<strong>REDIS<\/strong>.<br>To use the one based on REDIS it is necessary to install the NuGet package&nbsp;<strong>Microsoft.Extensions.Caching.Redis<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Distributed Memory Cache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This implementation is provided by the framework and save our data in memory. It\u2019s not exactly a distributed cache, because data are saved from the application\u2019s instance on the server where it is located. It may be useful in some scenarios:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Development and testing<\/li><li>When a single server is used in production and memory consumption isn&#8217;t an issue.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Anyway, we will enable our application to use the \u201creal\u201d distributed solution only when necessary (the interface used for saving is the same).<br>To enable this IDistributedCache implementation you only need to register it in the Startup class as shown below:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nservices.AddDistributedMemoryCache();\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Distributed SQL Server Cache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This implementation enables the distributed cache to use a SQL Server database as a storage. There are some configuration steps to make. The first step consists of&nbsp;the creation of tables that will be used to persist data.<br>There\u2019s a line command tool that makes it easy using a simple instruction<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\ndotnet sql-cache create &lt;connection string &gt; &lt;schema &gt; &lt;table &gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">that permits to create a table with this structure:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nCREATE TABLE &#x5B;dbo].&#x5B;CacheTable](\n\u00a0\u00a0\u00a0\u00a0&#x5B;Id] &#x5B;nvarchar](449) NOT NULL,\n\u00a0\u00a0\u00a0\u00a0&#x5B;Value] &#x5B;varbinary](max) NOT NULL,\n\u00a0\u00a0\u00a0\u00a0&#x5B;ExpiresAtTime] &#x5B;datetimeoffset](7) NOT NULL,\n\u00a0\u00a0\u00a0\u00a0&#x5B;SlidingExpirationInSeconds] &#x5B;bigint] NULL,\n\u00a0\u00a0\u00a0\u00a0&#x5B;AbsoluteExpiration] &#x5B;datetimeoffset](7) NULL,\n\u00a0CONSTRAINT &#x5B;pk_Id] PRIMARY KEY CLUSTERED \n(\n\u00a0\u00a0\u00a0\u00a0&#x5B;Id] ASC\n)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, \n\u00a0\u00a0\u00a0\u00a0IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, \n\u00a0\u00a0\u00a0\u00a0ALLOW_PAGE_LOCKS = ON) ON &#x5B;PRIMARY]\n) ON &#x5B;PRIMARY] TEXTIMAGE_ON &#x5B;PRIMARY]\n\u00a0\nCREATE NONCLUSTERED INDEX &#x5B;Index_ExpiresAtTime] ON &#x5B;dbo].&#x5B;CacheTable]\n(\n\u00a0\u00a0\u00a0\u00a0&#x5B;ExpiresAtTime] ASC\n)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, \n\u00a0\u00a0\u00a0\u00a0SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, \n\u00a0\u00a0\u00a0\u00a0ONLINE = OFF, ALLOW_ROW_LOCKS = ON, \n\u00a0\u00a0\u00a0\u00a0ALLOW_PAGE_LOCKS = ON) ON &#x5B;PRIMARY]\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The second and last step in the configuration of this implementation consists of the registration in our application. In the Startup class, inside the ConfigureServices method, we add this code block:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nservices.AddDistributedSqlServerCache(o =&gt;\n{\n\u00a0\u00a0\u00a0\u00a0o.ConnectionString = Configuration&#x5B;&quot;ConnectionStrings:Default&quot;];\n\u00a0\u00a0\u00a0\u00a0o.SchemaName = &quot;dbo&quot;;\n\u00a0\u00a0\u00a0\u00a0o.TableName = &quot;Cache&quot;;\n});\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Distributed Redis Cache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The use of Redis is widespread in distributed caching scenarios. Redis is an in-fast-memory datastore, it is opensource and is of key-value type. It provides response times of less than one millisecond, allowing millions of requests per second for each real-time application in a variety of fields.<br>If the infrastructure of your application is based on an Azure cloud, the service&nbsp;<strong>Azure Redis Cache<\/strong>&nbsp;is available and it can be configured from your subscription.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To use the distributed cache on Redis, the installation of the package Microsoft.Extensions.Caching.Redis is necessary.<br>The first step is configuring the service in the Startup.class<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic void ConfigureServices(IServiceCollection services)\n{\n\u00a0\u00a0\/\/ Add framework services.\n\u00a0\u00a0\/\/ ... altri servizi ...\n\u00a0\u00a0\u00a0\n\u00a0\u00a0services.AddDistributedRedisCache(cfg =&gt; \n\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0cfg.Configuration = Configuration.GetConnectionString(&quot;redis&quot;);\n\u00a0\u00a0});\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If we are using the Azure Redis Cache we can find the connection string by accessing the section \u201caccess keys\u201d of the panel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"721\" height=\"262\" data-attachment-id=\"28254\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/attachment\/img02-2-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/img02.png?fit=721%2C262&amp;ssl=1\" data-orig-size=\"721,262\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"img02\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/img02.png?fit=721%2C262&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/img02.png?resize=721%2C262&#038;ssl=1\" alt=\"\" class=\"wp-image-28254\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/img02.png 721w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/img02-480x174.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 721px, 100vw\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">How to use IDistributedCache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The use of the interface IDistributedCache is particularly simple: if you have already read my article about the use of the interface IMemoryCache, you will find several points in command. If you want to use it in a controller, you need to inject the instance in the constructor for first, as you can see in the following code:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class HomeController : Controller\n{\n\u00a0\u00a0\u00a0\u00a0private readonly IDistributedCache _cache;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public HomeController(IDistributedCache cache)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0_cache = cache;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0public async Task &lt;IActionResult &gt; Index()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0await _cache.SetStringAsync(&quot;TestString&quot;, &quot;TestValue&quot;);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var value = _cache.GetString(&quot;TestString&quot;);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return View();\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If you let this code running and you insert a breakpoint in the last line of the Index method, you will have this result:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"433\" height=\"129\" data-attachment-id=\"28256\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/attachment\/img01-2-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/img01.png?fit=433%2C129&amp;ssl=1\" data-orig-size=\"433,129\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"img01\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/img01.png?fit=433%2C129&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/img01.png?resize=433%2C129&#038;ssl=1\" alt=\"\" class=\"wp-image-28256\" srcset=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/img01.png?w=433&amp;ssl=1 433w, https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/img01.png?resize=300%2C89&amp;ssl=1 300w\" sizes=\"auto, (max-width: 433px) 100vw, 433px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We can easily check the duration of the cache using the class&nbsp;<strong>DistributedCacheEntryOptions<\/strong>. In the following code, we create an instance, setting the duration on one hour.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic async Task &lt;IActionResult &gt; Index()\n{\n\u00a0\u00a0\u00a0\u00a0var options = new DistributedCacheEntryOptions\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0AbsoluteExpiration = DateTime.Now.AddHours(1)\n\u00a0\u00a0\u00a0\u00a0};\n\u00a0\n\u00a0\u00a0\u00a0\u00a0await _cache.SetStringAsync(&quot;TestString&quot;, &quot;TestValue&quot;, options);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0var value = _cache.GetString(&quot;TestString&quot;);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0return View();\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Conclusions and recommendations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The decision on which implementation of IDistributedCache to use in our apps varies depending on some factors. The choice between Redis and SQL (I keep the memory implementation out because it is used only for testing and development) should be made basing on which infrastructure is available for you, to your performance requirements and to the experience of your development team. If the team feels at ease with Redis, this would be the best choice. The SQL implementation is still a good solution, but it should be remembered that data recovery will not offer excellent performance, so data to be cached should be chosen carefully.<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Let\u2019s see how to manage the caching in distributed scenarios with .NET Core and how to choose the right data repository<\/p>\n","protected":false},"author":196716246,"featured_media":28248,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637524],"tags":[688637542,688637416,688637381,688637384],"class_list":["post-28260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-en","tag-dotnetcore-en","tag-asp-net-core-en","tag-azure-en","tag-c-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Distributed cache in ASP.NET Core - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Distributed cache in ASP.NET Core - Blexin\" \/>\n<meta property=\"og:description\" content=\"Let\u2019s see how to manage the caching in distributed scenarios with .NET Core and how to choose the right data repository\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-24T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-21T17:59:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Francesco de Vicariis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Francesco de Vicariis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/\"},\"author\":{\"name\":\"Francesco de Vicariis\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\"},\"headline\":\"Distributed cache in ASP.NET Core\",\"datePublished\":\"2019-09-24T22:00:00+00:00\",\"dateModified\":\"2021-05-21T17:59:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/\"},\"wordCount\":730,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1\",\"keywords\":[\".NetCore\",\"Asp.net core\",\"Azure\",\"C#\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/\",\"name\":\"Distributed cache in ASP.NET Core - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2019-09-24T22:00:00+00:00\",\"dateModified\":\"2021-05-21T17:59:10+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/distributed-cache-in-asp-net-core\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Distributed cache in ASP.NET Core\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/en\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\",\"name\":\"Francesco de Vicariis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g\",\"caption\":\"Francesco de Vicariis\"},\"url\":\"https:\\\/\\\/blexin.com\\\/en\\\/author\\\/francesco-devicariisblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Distributed cache in ASP.NET Core - Blexin","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:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/","og_locale":"en_US","og_type":"article","og_title":"Distributed cache in ASP.NET Core - Blexin","og_description":"Let\u2019s see how to manage the caching in distributed scenarios with .NET Core and how to choose the right data repository","og_url":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/","og_site_name":"Blexin","article_published_time":"2019-09-24T22:00:00+00:00","article_modified_time":"2021-05-21T17:59:10+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Francesco de Vicariis","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Francesco de Vicariis","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/"},"author":{"name":"Francesco de Vicariis","@id":"https:\/\/blexin.com\/en\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f"},"headline":"Distributed cache in ASP.NET Core","datePublished":"2019-09-24T22:00:00+00:00","dateModified":"2021-05-21T17:59:10+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/"},"wordCount":730,"image":{"@id":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1","keywords":[".NetCore","Asp.net core","Azure","C#"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/","url":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/","name":"Distributed cache in ASP.NET Core - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1","datePublished":"2019-09-24T22:00:00+00:00","dateModified":"2021-05-21T17:59:10+00:00","author":{"@id":"https:\/\/blexin.com\/en\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f"},"breadcrumb":{"@id":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/en\/blog-en\/distributed-cache-in-asp-net-core\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/en\/"},{"@type":"ListItem","position":2,"name":"Distributed cache in ASP.NET Core"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/en\/#website","url":"https:\/\/blexin.com\/en\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blexin.com\/en\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f","name":"Francesco de Vicariis","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g","caption":"Francesco de Vicariis"},"url":"https:\/\/blexin.com\/en\/author\/francesco-devicariisblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7lO","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/1126dea7-099f-4191-b18b-c3691cd34b47.png?fit=1024%2C608&ssl=1","_links":{"self":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts\/28260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/users\/196716246"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/comments?post=28260"}],"version-history":[{"count":7,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts\/28260\/revisions"}],"predecessor-version":[{"id":32925,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts\/28260\/revisions\/32925"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/media\/28248"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/media?parent=28260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/categories?post=28260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/tags?post=28260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}