{"id":30344,"date":"2024-11-04T16:58:28","date_gmt":"2024-11-04T15:58:28","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=30344"},"modified":"2024-11-04T17:04:30","modified_gmt":"2024-11-04T16:04:30","slug":"opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/","title":{"rendered":"OpenDev Explorer &#8211; Episodio 9 FusionCache: gli orecchini Potara delle cache"},"content":{"rendered":"\n<p>Se ti chiedessi di parlarmi della cache, se fossi uno sviluppatore backend mi parleresti di Redis, mentre se fossi uno sviluppatore frontend sicuramente mi diresti &#8220;quel maledetto meccanismo per cui devo fare ctrl f5 per far vedere le mie modifiche sul browser&#8221;.<\/p>\n\n\n\n<p>Io invece oggi sono qui a parlarti di un tipo di cache &#8220;dev friendly&#8221;, una cache di tipo ibrido per i progetti .Net.<\/p>\n\n\n\n<p>Benvenuti a <strong>OpenDev Explorer<\/strong>, la mia rubrica dedicata all&#8217;esplorazione del mondo Open Source che strizza un occhio alla developer experience. Io sono Riccardo (aka TheZal) e oggi vi parler\u00f2 di <a href=\"https:\/\/github.com\/ZiggyCreatures\/FusionCache\/tree\/main\">FusionCache<\/a>, una libreria che vi permetter\u00e1 di gestire in maniera ibrida la cache sui vostri progetti .NET.<\/p>\n\n\n\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-d3845ff3      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tIndice\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#panoramica-generale\" class=\"uagb-toc-link__trigger\">Panoramica Generale<\/a><li class=\"uagb-toc__list\"><a href=\"#manuale-distruzioni\" class=\"uagb-toc-link__trigger\">Manuale d&#039;istruzioni<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#installazione\" class=\"uagb-toc-link__trigger\">Installazione<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#utilizzo\" class=\"uagb-toc-link__trigger\">Utilizzo<\/a><\/li><\/ul><\/li><li class=\"uagb-toc__list\"><a href=\"#la-developer-experience\" class=\"uagb-toc-link__trigger\">La developer experience<\/a><li class=\"uagb-toc__list\"><a href=\"#lextra-mile\" class=\"uagb-toc-link__trigger\">L&#039;extra mile<\/a><li class=\"uagb-toc__list\"><a href=\"#il-confronto-con-lo-status-quo\" class=\"uagb-toc-link__trigger\">Il confronto con lo status quo<\/a><li class=\"uagb-toc__list\"><a href=\"#tiriamo-le-somme\" class=\"uagb-toc-link__trigger\">Tiriamo le somme!<\/a><\/ul><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<h2 class=\"wp-block-heading\" id=\"h-panoramica-generale\">Panoramica Generale<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/github.com\/ZiggyCreatures\/FusionCache\/raw\/main\/docs\/images\/diagram.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>FusionCache \u00e8 una cache ibrida progettata per essere semplice da usare, veloce e resiliente, con funzionalit\u00e0 avanzate di gestione degli errori.<\/p>\n\n\n\n<p>Nasce dall\u2019esperienza accumulata negli anni affrontando le pi\u00f9 diverse tipologie di cache: dalla cache in memoria a quella distribuita, dalla cache HTTP alle CDN, fino alla cache offline e del browser.<\/p>\n\n\n\n<p>FusionCache, essendo una cache ibrida, pu\u00f2 funzionare in modo trasparente sia come cache in memoria (L1) che come cache multi-livello (L1+L2). In questo secondo caso, il livello distribuito (L2) pu\u00f2 essere qualsiasi implementazione dell&#8217;interfaccia standard <code>IDistributedCache<\/code>. Questo approccio offre avvii a freddo pi\u00f9 rapidi, migliore scalabilit\u00e0 orizzontale, maggiore resilienza e prestazioni complessive superiori.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-manuale-d-istruzioni\">Manuale d&#8217;istruzioni<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-installazione\">Installazione<\/h3>\n\n\n\n<p>Installare fusioncache \u00e9 semplicissimo, infatti \u00e9 disponibile come pacchetto su nuget ed \u00e9 possibile installarlo sia tramite Nuget UI (cercando il pachetto <code>ZiggyCreatures.FusionCache<\/code>) che tramite la console di nuget tramite il comando<\/p>\n\n\n\n<p><code>PM&gt; Install-Package ZiggyCreatures.FusionCache<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-utilizzo\">Utilizzo<\/h3>\n\n\n\n<p>Per iniziare a usare FusionCache, la prima cosa da fare \u00e8 creare un\u2019istanza di cache:<br><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> cache = <span class=\"hljs-keyword\">new<\/span> FusionCache(<span class=\"hljs-keyword\">new<\/span> FusionCacheOptions());\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Se invece stai utilizzando la Dependency Injection, ti basta aggiungere questa riga:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">services<\/span><span class=\"hljs-selector-class\">.AddFusionCache<\/span>();\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u00c8 possibile anche configurare delle opzioni globali, come ad esempio un oggetto FusionCacheEntryOptions predefinito con una durata di 2 minuti per ogni operazione che andremo a fare:<br><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">var<\/span> cache = <span class=\"hljs-keyword\">new<\/span> FusionCache(<span class=\"hljs-keyword\">new<\/span> FusionCacheOptions() {\n\tDefaultEntryOptions = <span class=\"hljs-keyword\">new<\/span> FusionCacheEntryOptions {\n\t\tDuration = TimeSpan.FromMinutes(<span class=\"hljs-number\">2<\/span>)\n\t}\n});<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Oppure, sempre tramite Dependency Injection:<br><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">services.AddFusionCache()\n\t.WithDefaultEntryOptions(<span class=\"hljs-keyword\">new<\/span> FusionCacheEntryOptions {\n\t\tDuration = TimeSpan.FromMinutes(<span class=\"hljs-number\">2<\/span>)\n\t});<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Ora, per ottenere un prodotto dalla cache e, se non \u00e8 presente, recuperarlo dal database in modo ottimizzato e salvarlo in cache per 30 secondi (sovrascrivendo i 2 minuti predefiniti di cui sopra), basta fare cos\u00ec:<br><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">var<\/span> id = <span class=\"hljs-number\">42<\/span>;\n\ncache.GetOrSet&lt;Product&gt;(\n\t$<span class=\"hljs-string\">\"product:{id}\"<\/span>,\n\t_ =&gt; GetProductFromDb(id),\n\tTimeSpan.FromSeconds(<span class=\"hljs-number\">30<\/span>)\n);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-la-developer-experience\">La developer experience<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/github.com\/ZiggyCreatures\/FusionCache\/raw\/main\/docs\/logo-256x256.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p>La semplicit\u00e1 di utilizzo di FusionCache lo rende un progetto super appetibile per quello che riguarda la developer experience, avendo tra le sue principali armi la sua facilit\u00e1 di implementazione e il fatto di essere un progetto production ready out of the box.<\/p>\n\n\n\n<p>Inoltre FusionCache ha nella sua documentazione diverse risorse molto utili per quello che riguarda il bootstrap iniziale, permettendo di avere una curva d&#8217;apprendimento relativemente bassa.<\/p>\n\n\n\n<p>In pi\u00fa visto che l&#8217;autore del progetto si \u00e9 reso conto che a volte figurare un sistema distribuito \u00e9 il modo migliore per capirlo, ha anche implementato un simulatore che permette di capire come funzioni FusionCache.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-l-extra-mile\">L&#8217;extra mile<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/media.self.com\/photos\/5ecd379946445093014de534\/2:1\/w_1280,c_limit\/medic-covid.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>L&#8217;extra mile di FusionCache \u00e9 dato sicuramente dal sistema di autorecovery che permette di recuperare la salute del nostro sistema di cache in caso di malfunzionamento.<\/p>\n\n\n\n<p>In caso di problemi transitori con i componenti distribuiti (come la cache distribuita o il backplane), FusionCache cercher\u00e0 di risolverli automaticamente, senza bisogno di alcun intervento.<\/p>\n\n\n\n<p>L&#8217;autorecovery pu\u00f3 essere approfondito <a href=\"https:\/\/github.com\/ZiggyCreatures\/FusionCache\/blob\/main\/docs\/AutoRecovery.md\">qui<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-il-confronto-con-lo-status-quo\">Il confronto con lo status quo<\/h2>\n\n\n\n<p>Ci sono innumerevoli librerie che si occupano di gestione cache in circolazione, per\u00f3 per avere un confronto diretto, nel repository ufficiale del progetto \u00e9 possibile trovare la seguente tabella che riassume le differenze con altre librerie.<br><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><\/td><td>FusionCache<\/td><td>HybridCache<\/td><td>CacheManager<\/td><td>CacheTower<\/td><td>EasyCaching<\/td><td>LazyCache<\/td><\/tr><tr><td>Cache Stampede<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><\/tr><tr><td>Sync Api<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u2714<\/td><td>\u2714<\/td><\/tr><tr><td>Async Api<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u2714<\/td><td>\u2714<\/td><td>!<\/td><\/tr><tr><td>Fail-Safe<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><\/tr><tr><td>Timeouts<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><\/tr><tr><td>Adaptive caching<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u2714<\/td><\/tr><tr><td>Cancellation<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><\/tr><tr><td>Multi provider<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u274c<\/td><\/tr><tr><td>Multi level<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>!<\/td><td>\u274c<\/td><\/tr><tr><td>Backplane<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u274c<\/td><\/tr><tr><td>Auto recovery<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><\/tr><tr><td>Events<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><\/tr><tr><td>Open Telemetry<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><\/tr><tr><td>Logging<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u2714<\/td><td>\u274c<\/td><\/tr><tr><td>Portable<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><\/tr><tr><td>Tests<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><\/tr><tr><td>Xml Comments<\/td><td>\u2714<\/td><td>\u274c<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u274c<\/td><\/tr><tr><td>Docs<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><td>\u2714<\/td><\/tr><tr><td>License<\/td><td>MIT<\/td><td>Same as .net<\/td><td>Apache 2.0<\/td><td>MIT<\/td><td>MIT<\/td><td>MIT<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-tiriamo-le-somme\">Tiriamo le somme!<\/h2>\n\n\n\n<p>Reputo FusionCache uno dei progetti pi\u00fa interessanti che ho avuto la possibilit\u00e1 di conoscere a Codemotion 2024, sia per quello che riguarda la sua developer experience, che per le potenzialit\u00e1 del progetto che si capiscono anche dal fatto che<\/p>\n\n\n\n<p>Microsoft ha deciso di implementare la sua HybridCache seguendo gli stessi passi di FusionCache.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se ti chiedessi di parlarmi della cache, se fossi uno sviluppatore backend mi parleresti di Redis, mentre se fossi uno sviluppatore frontend sicuramente mi diresti &#8220;quel maledetto meccanismo per cui devo fare ctrl f5 per far vedere le mie modifiche sul browser&#8221;. Io invece oggi sono qui a parlarti di un tipo di cache &#8220;dev&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/\">Read more<\/a><\/p>\n","protected":false},"author":193,"featured_media":30433,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10263],"tags":[12737,11667,12739],"collections":[11708],"class_list":{"0":"post-30344","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend-it","8":"tag-fusioncache","9":"tag-opendev-explorer","10":"tag-opensource","11":"collections-dalla-community","12":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>OpenDev Explorer - Episodio 9 FusionCache: gli orecchini Potara delle cache - Codemotion Magazine<\/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:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OpenDev Explorer - Episodio 9 FusionCache: gli orecchini Potara delle cache\" \/>\n<meta property=\"og:description\" content=\"Se ti chiedessi di parlarmi della cache, se fossi uno sviluppatore backend mi parleresti di Redis, mentre se fossi uno sviluppatore frontend sicuramente mi diresti &#8220;quel maledetto meccanismo per cui devo fare ctrl f5 per far vedere le mie modifiche sul browser&#8221;. Io invece oggi sono qui a parlarti di un tipo di cache &#8220;dev&#8230; Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-04T15:58:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-04T16:04:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"TheZal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"TheZal\" \/>\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:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/\"},\"author\":{\"name\":\"TheZal\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/f3f099160f0d8f2f80c5e4f3c8d53503\"},\"headline\":\"OpenDev Explorer &#8211; Episodio 9 FusionCache: gli orecchini Potara delle cache\",\"datePublished\":\"2024-11-04T15:58:28+00:00\",\"dateModified\":\"2024-11-04T16:04:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/\"},\"wordCount\":652,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/fusioncache.png\",\"keywords\":[\"fusioncache\",\"OpenDev Explorer\",\"opensource\"],\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/\",\"name\":\"OpenDev Explorer - Episodio 9 FusionCache: gli orecchini Potara delle cache - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/fusioncache.png\",\"datePublished\":\"2024-11-04T15:58:28+00:00\",\"dateModified\":\"2024-11-04T16:04:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/fusioncache.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/fusioncache.png\",\"width\":1280,\"height\":720,\"caption\":\"fusion cache, open source, open dev explorer\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/backend-it\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"OpenDev Explorer &#8211; Episodio 9 FusionCache: gli orecchini Potara delle cache\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/f3f099160f0d8f2f80c5e4f3c8d53503\",\"name\":\"TheZal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/avatar-100x100.png\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/avatar-100x100.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/avatar-100x100.png\",\"caption\":\"TheZal\"},\"description\":\"Hello there! My name is Riccardo (aka TheZal), a passionate software engineer who loves to combine his passion for code with his love for fantasy realms like Dungeons and Dragons, Harry Potter, Star Wars, LOTR, etc., etc. I'm really into studying and exploring new technologies (with a lot of love for Open Source). I'm also a co-owner of a 12-year-old dachshund called Poldo, who is the mascot of my blog!\",\"sameAs\":[\"http:\\\/\\\/www.thezal.dev\"],\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/thezal\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"OpenDev Explorer - Episodio 9 FusionCache: gli orecchini Potara delle cache - Codemotion Magazine","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:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/","og_locale":"en_US","og_type":"article","og_title":"OpenDev Explorer - Episodio 9 FusionCache: gli orecchini Potara delle cache","og_description":"Se ti chiedessi di parlarmi della cache, se fossi uno sviluppatore backend mi parleresti di Redis, mentre se fossi uno sviluppatore frontend sicuramente mi diresti &#8220;quel maledetto meccanismo per cui devo fare ctrl f5 per far vedere le mie modifiche sul browser&#8221;. Io invece oggi sono qui a parlarti di un tipo di cache &#8220;dev&#8230; Read more","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-11-04T15:58:28+00:00","article_modified_time":"2024-11-04T16:04:30+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache.png","type":"image\/png"}],"author":"TheZal","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"TheZal","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/"},"author":{"name":"TheZal","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/f3f099160f0d8f2f80c5e4f3c8d53503"},"headline":"OpenDev Explorer &#8211; Episodio 9 FusionCache: gli orecchini Potara delle cache","datePublished":"2024-11-04T15:58:28+00:00","dateModified":"2024-11-04T16:04:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/"},"wordCount":652,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache.png","keywords":["fusioncache","OpenDev Explorer","opensource"],"articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/","name":"OpenDev Explorer - Episodio 9 FusionCache: gli orecchini Potara delle cache - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache.png","datePublished":"2024-11-04T15:58:28+00:00","dateModified":"2024-11-04T16:04:30+00:00","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache.png","width":1280,"height":720,"caption":"fusion cache, open source, open dev explorer"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/opendev-explorer-episodio-9-fusioncache-gli-orecchini-potara-delle-cache\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/"},{"@type":"ListItem","position":3,"name":"OpenDev Explorer &#8211; Episodio 9 FusionCache: gli orecchini Potara delle cache"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/f3f099160f0d8f2f80c5e4f3c8d53503","name":"TheZal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/avatar-100x100.png","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/avatar-100x100.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/avatar-100x100.png","caption":"TheZal"},"description":"Hello there! My name is Riccardo (aka TheZal), a passionate software engineer who loves to combine his passion for code with his love for fantasy realms like Dungeons and Dragons, Harry Potter, Star Wars, LOTR, etc., etc. I'm really into studying and exploring new technologies (with a lot of love for Open Source). I'm also a co-owner of a 12-year-old dachshund called Poldo, who is the mascot of my blog!","sameAs":["http:\/\/www.thezal.dev"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/thezal\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-600x400.png","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-600x600.png","author_info":{"display_name":"TheZal","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/thezal\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache.png",1280,720,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-150x150.png",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-300x169.png",300,169,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-768x432.png",768,432,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-1024x576.png",1024,576,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache.png",1280,720,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache.png",1280,720,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-100x100.png",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-180x128.png",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-896x504.png",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-400x225.png",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-600x400.png",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/11\/fusioncache-600x600.png",600,600,true]},"uagb_author_info":{"display_name":"TheZal","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/thezal\/"},"uagb_comment_info":0,"uagb_excerpt":"Se ti chiedessi di parlarmi della cache, se fossi uno sviluppatore backend mi parleresti di Redis, mentre se fossi uno sviluppatore frontend sicuramente mi diresti &#8220;quel maledetto meccanismo per cui devo fare ctrl f5 per far vedere le mie modifiche sul browser&#8221;. Io invece oggi sono qui a parlarti di un tipo di cache &#8220;dev&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/30344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/193"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=30344"}],"version-history":[{"count":4,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/30344\/revisions"}],"predecessor-version":[{"id":31436,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/30344\/revisions\/31436"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/30433"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=30344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=30344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=30344"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=30344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}