{"id":28246,"date":"2019-09-25T00:00:00","date_gmt":"2019-09-24T22:00:00","guid":{"rendered":"https:\/\/blexin.com\/?p=28246"},"modified":"2021-05-21T19:58:56","modified_gmt":"2021-05-21T17:58:56","slug":"cache-distribuita-in-asp-net-core","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/","title":{"rendered":"Cache distribuita 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=\"28247\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/attachment\/1126dea7-099f-4191-b18b-c3691cd34b47\/\" 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-28247\" 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\">Nel precedente&nbsp;<a href=\"https:\/\/www.blexin.com\/it-IT\/Article\/Blog\/In-memory-caching-in-ASPNET-Core-45\" target=\"_blank\" rel=\"noreferrer noopener\">articolo<\/a>&nbsp;vi ho parlato di come gestire il caching in un\u2019applicazione Asp.Net Core utilizzando<em>&nbsp;<strong>in-memory caching<\/strong><\/em>. L\u2019utilizzo di questo tipo di caching funziona quando la vostra applicazione \u00e8 ospitata su un singolo server. Quali sono, invece, gli strumenti che ci mette a disposizione il framework .NET Core per fare caching in uno scenario distribuito, come per esempio in cloud?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Interfaccia IDistributedCache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il framework ci mette a disposizione questa interfaccia:<\/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\">Se ricordate quella utilizzata nel precedente articolo (<strong>IMemoryCache<\/strong>), potrete notare somiglianze ma anche tante differenze:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Metodi async<\/li><li>Metodi di Refresh (Per aggiornare le chiavi di cache senza richiedere dati)<\/li><li>Metodi byte based e non object based<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Al momento, sono presenti 3 implementazioni fornite da Microsoft: una&nbsp;<strong>in memory<\/strong>&nbsp;che viene utilizzata principalmente nella fase di sviluppo di un\u2019applicazione, una basata su&nbsp;<strong>SQL server<\/strong>&nbsp;e l\u2019ultima basata su&nbsp;<strong>REDIS<\/strong>.<br>Per utilizzare quella basata su REDIS \u00e8 necessaria l\u2019installazione del pacchetto NuGet&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\">Questa implementazione \u00e8 fornita direttamente dal framework e conserva i nostri dati in memoria. Non \u00e8 propriamente un tipo di cache distribuita, perch\u00e9 i dati vengono salvati dalla istanza dell\u2019app sul server su cui gira. Pu\u00f2 essere comunque utile in alcuni scenari:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Sviluppo e testing<\/li><li>Quando un singolo server \u00e8 usato in produzione senza problemi sull\u2019utilizzo della memoria.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In ogni caso, abilitiamo la nostra applicazione ad utilizzare una \u201cvera\u201d soluzione distribuita quando diventa necessaria (l\u2019interfaccia utilizzata per il salvataggio e il caricamento dei dati \u00e8 la stessa).<br>Per abilitare questa implementazione di IDistributedCache, basta registrarla all\u2019interno della classe Startup in questo modo:<\/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\">Questa implementazione abilita la cache distribuita ad usare un database SQL Server come storage. Ci sono dei passi di configurazione da effettuare. Il primo consiste nel creare le tabelle che verranno usate per persistere i dati.<br>Per rendere semplice questa operazione \u00e8 presente un tool a linea di comando, che, tramite una semplice istruzione<\/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\">permette di creare una tabella con questa struttura:<\/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\">Il secondo ed ultimo passo nella configurazione di questa implementazione consiste nel registrarla nella nostra applicazione. Nella classe di Startup, all\u2019interno del metodo ConfigureServices, andiamo ad aggiungere questo blocco di codice:<\/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\">L\u2019utilizzo di Redis \u00e8 molto diffuso, quando si parla di scenari di caching distribuito. Redis \u00e8 un datastore in memoria veloce, open source e di tipo chiave valore. Fornisce tempi di risposta inferiori al millisecondo, consentendo milioni di richieste al secondo per ogni applicazione in tempo reale in svariati campi.<br>Se l\u2019infrastruttura della vostra applicazione \u00e8 basata sul cloud di Azure, \u00e8 disponibile il servizio&nbsp;<strong>Azure Redis Cache<\/strong>, configurabile dalla vostra sottoscrizione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per poter utilizzare la cache distribuita su Redis, \u00e8 necessaria l\u2019installazione del package Microsoft.Extensions.Caching.Redis.<br>Il primo passo \u00e8 quello di configurare il servizio nella classe Startup:<\/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\">Se stiamo utilizzando Redis Cache di Azure, possiamo reperire la connection string accedendo alla sezione \u201cChiavi di accesso\u201d del pannello.<\/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=\"28253\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/attachment\/img02-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-28253\" 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\">Utilizzo di IDistributedCache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Utilizzare l\u2019interfaccia IDistributedCache \u00e8 estremamente semplice: se avete gi\u00e0 letto il mio articolo sull\u2019utilizzo dell\u2019interfaccia IMemoryCache, troverete parecchi punti in comune. Volendola utilizzare in un controller, per prima cosa \u00e8 necessario iniettarne l\u2019istanza nel costruttore, come potete vedere dal codice che segue:<\/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\">Se eseguite questo codice e inserite un breakpoint sull\u2019ultima riga del metodo Index, vedrete questo risultato:<\/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=\"28255\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/attachment\/img01-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-28255\" 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\">Possiamo facilmente controllare la durata della cache utilizzando la classe\u00a0<strong>DistributedCacheEntryOptions<\/strong>. Nel codice che segue, ne creiamo un\u2019istanza, impostando la durata ad un\u2019ora:<\/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\">Conclusioni e raccomandazioni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La decisione su quale implementazione di IDistributedCache utilizzare nelle nostre app varia in base a diversi fattori. La scelta tra Redis e SQL (escludo volutamente l\u2019implementazione memory, non utilizzabile se non a fini di sviluppo e testing) dovr\u00e0 essere fatta in base all\u2019infrastruttura a vostra disposizione, ai requisiti di prestazione a cui dovete sottostare e all\u2019esperienza del vostro team di sviluppo. Se il team si sente a proprio agio a lavorare con Redis, questa sicuramente potrebbe essere la scelta migliore. L\u2019implementazione SQL \u00e8 comunque una buona soluzione ma va ricordato che il recupero di dati non offrir\u00e0 prestazioni eccellenti, quindi i dati da cachare vanno scelti in modo oculato.<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Vediamo come gestire il caching in scenari distribuiti con .NET Core e come scegliere il giusto repository dei dati<\/p>\n","protected":false},"author":196716246,"featured_media":28247,"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,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","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":[688637374],"tags":[688637541,688637414,688637377,688637382],"class_list":["post-28246","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-dotnetcore","tag-asp-net-core","tag-azure","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cache distribuita 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\/it\/blog\/cache-distribuita-in-asp-net-core\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cache distribuita in Asp.NET Core - Blexin\" \/>\n<meta property=\"og:description\" content=\"Vediamo come gestire il caching in scenari distribuiti con .NET Core e come scegliere il giusto repository dei dati\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/cache-distribuita-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:58:56+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=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Francesco de Vicariis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-in-asp-net-core\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-in-asp-net-core\\\/\"},\"author\":{\"name\":\"Francesco de Vicariis\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\"},\"headline\":\"Cache distribuita in Asp.NET Core\",\"datePublished\":\"2019-09-24T22:00:00+00:00\",\"dateModified\":\"2021-05-21T17:58:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-in-asp-net-core\\\/\"},\"wordCount\":701,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-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\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-in-asp-net-core\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-in-asp-net-core\\\/\",\"name\":\"Cache distribuita in Asp.NET Core - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-in-asp-net-core\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-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:58:56+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-in-asp-net-core\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-in-asp-net-core\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/cache-distribuita-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\\\/it\\\/blog\\\/cache-distribuita-in-asp-net-core\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cache distribuita in Asp.NET Core\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\",\"name\":\"Francesco de Vicariis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@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\\\/it\\\/author\\\/francesco-devicariisblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cache distribuita 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\/it\/blog\/cache-distribuita-in-asp-net-core\/","og_locale":"it_IT","og_type":"article","og_title":"Cache distribuita in Asp.NET Core - Blexin","og_description":"Vediamo come gestire il caching in scenari distribuiti con .NET Core e come scegliere il giusto repository dei dati","og_url":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/","og_site_name":"Blexin","article_published_time":"2019-09-24T22:00:00+00:00","article_modified_time":"2021-05-21T17:58:56+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":{"Scritto da":"Francesco de Vicariis","Tempo di lettura stimato":"5 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/"},"author":{"name":"Francesco de Vicariis","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f"},"headline":"Cache distribuita in Asp.NET Core","datePublished":"2019-09-24T22:00:00+00:00","dateModified":"2021-05-21T17:58:56+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/"},"wordCount":701,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-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":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/","url":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/","name":"Cache distribuita in Asp.NET Core - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-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:58:56+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/cache-distribuita-in-asp-net-core\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/cache-distribuita-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\/it\/blog\/cache-distribuita-in-asp-net-core\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Cache distribuita in Asp.NET Core"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f","name":"Francesco de Vicariis","image":{"@type":"ImageObject","inLanguage":"it-IT","@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\/it\/author\/francesco-devicariisblexin-com\/"}]}},"jetpack_publicize_connections":[],"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","jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7lA","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28246","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716246"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=28246"}],"version-history":[{"count":6,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28246\/revisions"}],"predecessor-version":[{"id":28259,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28246\/revisions\/28259"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/28247"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=28246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=28246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=28246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}