{"id":1321,"date":"2026-03-28T08:33:14","date_gmt":"2026-03-28T11:33:14","guid":{"rendered":"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/"},"modified":"2026-03-28T08:33:14","modified_gmt":"2026-03-28T11:33:14","slug":"cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables","status":"publish","type":"post","link":"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/","title":{"rendered":"Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables"},"content":{"rendered":"<p>En la <a href=\"#\">primera parte de esta serie<\/a> implementamos el patr\u00f3n Cache-Aside con <code>IMemoryCache<\/code> en ASP.NET Core. Funciona perfecto para una sola instancia, pero en producci\u00f3n con m\u00faltiples replicas la historia cambia.<\/p>\n<h2>El problema con IMemoryCache en entornos distribuidos<\/h2>\n<p>Cuando una aplicaci\u00f3n corre en m\u00faltiples instancias (detr\u00e1s de un load balancer, en Kubernetes, etc.), cada instancia mantiene su <strong>propio cach\u00e9 independiente<\/strong>. Esto genera:<\/p>\n<ul>\n<li><strong>Inconsistencias:<\/strong> distintas instancias pueden tener versiones distintas del mismo dato.<\/li>\n<li><strong>Duplicaci\u00f3n:<\/strong> el mismo dato se cachea N veces en N instancias.<\/li>\n<li><strong>Mayor presi\u00f3n de memoria:<\/strong> cada proceso consume RAM por separado.<\/li>\n<li><strong>Invalidaci\u00f3n incompleta:<\/strong> borrar el cach\u00e9 en una instancia no afecta a las dem\u00e1s.<\/li>\n<\/ul>\n<p>La soluci\u00f3n: un <strong>cach\u00e9 distribuido compartido<\/strong>. El candidato m\u00e1s popular en el ecosistema .NET es <strong>Redis<\/strong>.<\/p>\n<h2>\u00bfPor qu\u00e9 Redis?<\/h2>\n<p>Redis (Remote Dictionary Server) es un almac\u00e9n de datos en memoria de c\u00f3digo abierto, extremadamente r\u00e1pido y con soporte nativo para estructuras de datos, TTL, pub\/sub y m\u00e1s.<\/p>\n<p>Ventajas clave sobre IMemoryCache en producci\u00f3n:<\/p>\n<ul>\n<li>Cach\u00e9 <strong>compartido entre todas las instancias<\/strong> de la aplicaci\u00f3n.<\/li>\n<li>Persistencia opcional ante reinicios del servicio.<\/li>\n<li>Escalabilidad horizontal con Redis Cluster.<\/li>\n<li>Monitoreo dedicado con herramientas como RedisInsight.<\/li>\n<li>Soporte nativo de TTL (expiraci\u00f3n autom\u00e1tica por clave).<\/li>\n<\/ul>\n<h2>Opci\u00f3n 1: Cache-Aside con IDistributedCache + Redis<\/h2>\n<p>ASP.NET Core incluye la abstracci\u00f3n <code>IDistributedCache<\/code>, compatible con Redis mediante el paquete oficial de Microsoft.<\/p>\n<h3>Instalaci\u00f3n<\/h3>\n<pre><code class=\"language-bash\">dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis<\/code><\/pre>\n<h3>Configuraci\u00f3n en Program.cs<\/h3>\n<pre><code class=\"language-csharp\">builder.Services.AddStackExchangeRedisCache(options =&gt;\n{\n    options.Configuration = builder.Configuration.GetConnectionString(\"Redis\");\n    options.InstanceName = \"MyApp:\";\n});<\/code><\/pre>\n<p>Y en <code>appsettings.json<\/code>:<\/p>\n<pre><code class=\"language-json\">{\n  \"ConnectionStrings\": {\n    \"Redis\": \"localhost:6379\"\n  }\n}<\/code><\/pre>\n<h3>Implementaci\u00f3n del servicio con Cache-Aside<\/h3>\n<pre><code class=\"language-csharp\">public class ProductService\n{\n    private readonly IDistributedCache _cache;\n    private readonly AppDbContext _dbContext;\n\n    public ProductService(IDistributedCache cache, AppDbContext dbContext)\n    {\n        _cache = cache;\n        _dbContext = dbContext;\n    }\n\n    public async Task&lt;Product?&gt; GetProductAsync(int id)\n    {\n        var cacheKey = $\"product_{id}\";\n        var cached = await _cache.GetStringAsync(cacheKey);\n\n        if (cached != null)\n            return JsonSerializer.Deserialize&lt;Product&gt;(cached);\n\n        \/\/ Cache miss: consulta la base de datos\n        var product = await _dbContext.Products.FindAsync(id);\n\n        if (product != null)\n        {\n            var options = new DistributedCacheEntryOptions()\n                .SetSlidingExpiration(TimeSpan.FromMinutes(5))\n                .SetAbsoluteExpiration(TimeSpan.FromMinutes(30));\n\n            await _cache.SetStringAsync(\n                cacheKey,\n                JsonSerializer.Serialize(product),\n                options\n            );\n        }\n\n        return product;\n    }\n\n    public async Task UpdateProductAsync(Product product)\n    {\n        _dbContext.Products.Update(product);\n        await _dbContext.SaveChangesAsync();\n\n        await _cache.RemoveAsync($\"product_{product.Id}\");\n    }\n}<\/code><\/pre>\n<p>El patr\u00f3n es id\u00e9ntico al de <code>IMemoryCache<\/code>, con la diferencia de que el dato se serializa a JSON (Redis trabaja con bytes\/strings) y el cach\u00e9 es compartido entre todas las instancias.<\/p>\n<h2>Opci\u00f3n 2: Cache-Aside con StackExchange.Redis directamente<\/h2>\n<p>Si necesit\u00e1s m\u00e1s control (pipelines, transacciones, estructuras avanzadas como hashes o sorted sets), pod\u00e9s usar el cliente <code>StackExchange.Redis<\/code> directamente sin pasar por la abstracci\u00f3n.<\/p>\n<h3>Instalaci\u00f3n<\/h3>\n<pre><code class=\"language-bash\">dotnet add package StackExchange.Redis<\/code><\/pre>\n<h3>Configuraci\u00f3n en Program.cs<\/h3>\n<pre><code class=\"language-csharp\">builder.Services.AddSingleton&lt;IConnectionMultiplexer&gt;(\n    ConnectionMultiplexer.Connect(\n        builder.Configuration.GetConnectionString(\"Redis\")!\n    )\n);<\/code><\/pre>\n<h3>Implementaci\u00f3n<\/h3>\n<pre><code class=\"language-csharp\">public class ProductService\n{\n    private readonly IDatabase _redis;\n    private readonly AppDbContext _dbContext;\n\n    public ProductService(IConnectionMultiplexer redis, AppDbContext dbContext)\n    {\n        _redis = redis.GetDatabase();\n        _dbContext = dbContext;\n    }\n\n    public async Task&lt;Product?&gt; GetProductAsync(int id)\n    {\n        var cacheKey = $\"products:{id}\";\n        var cached = await _redis.StringGetAsync(cacheKey);\n\n        if (cached.HasValue)\n            return JsonSerializer.Deserialize&lt;Product&gt;(cached!);\n\n        \/\/ Cache miss: consulta la base de datos\n        var product = await _dbContext.Products.FindAsync(id);\n\n        if (product != null)\n        {\n            await _redis.StringSetAsync(\n                cacheKey,\n                JsonSerializer.Serialize(product),\n                TimeSpan.FromMinutes(30)\n            );\n        }\n\n        return product;\n    }\n\n    public async Task UpdateProductAsync(Product product)\n    {\n        _dbContext.Products.Update(product);\n        await _dbContext.SaveChangesAsync();\n\n        await _redis.KeyDeleteAsync($\"products:{product.Id}\");\n    }\n}<\/code><\/pre>\n<h2>IMemoryCache vs Redis: \u00bfcu\u00e1l elegir?<\/h2>\n<table>\n<thead>\n<tr>\n<th>Caracter\u00edstica<\/th>\n<th>IMemoryCache<\/th>\n<th>Redis (IDistributedCache)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Velocidad<\/td>\n<td>&#x26a1; Muy r\u00e1pido (memoria local)<\/td>\n<td>&#x1f680; Muy r\u00e1pido (red local)<\/td>\n<\/tr>\n<tr>\n<td>Instancias m\u00faltiples<\/td>\n<td>&#x274c; Cach\u00e9 por instancia<\/td>\n<td>&#x2705; Cach\u00e9 compartido<\/td>\n<\/tr>\n<tr>\n<td>Persistencia<\/td>\n<td>&#x274c; Se pierde al reiniciar<\/td>\n<td>&#x2705; Opcional (AOF\/RDB)<\/td>\n<\/tr>\n<tr>\n<td>Escalabilidad<\/td>\n<td>Limitada a una instancia<\/td>\n<td>Alta (Redis Cluster)<\/td>\n<\/tr>\n<tr>\n<td>Serializaci\u00f3n<\/td>\n<td>No requerida<\/td>\n<td>Requerida (JSON\/protobuf)<\/td>\n<\/tr>\n<tr>\n<td>Complejidad operacional<\/td>\n<td>Ninguna<\/td>\n<td>Requiere servidor Redis<\/td>\n<\/tr>\n<tr>\n<td>Caso de uso ideal<\/td>\n<td>Desarrollo, instancia \u00fanica<\/td>\n<td>Producci\u00f3n multi-instancia<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Buenas pr\u00e1cticas con Redis<\/h2>\n<ul>\n<li>Us\u00e1 claves descriptivas con prefijo: <code>myapp:products:42<\/code> en lugar de solo <code>42<\/code>.<\/li>\n<li>Siempre defin\u00ed un TTL; sin expiraci\u00f3n, las claves persisten indefinidamente.<\/li>\n<li>No cachees objetos de gran tama\u00f1o (idealmente menos de unos pocos KB por entrada).<\/li>\n<li>Monitore\u00e1 el hit\/miss rate con <code>redis-cli INFO stats<\/code> o RedisInsight.<\/li>\n<li>Us\u00e1 <code>IDistributedCache<\/code> si quer\u00e9s poder cambiar de proveedor sin tocar el servicio; us\u00e1 <code>StackExchange.Redis<\/code> directamente si necesit\u00e1s features avanzados (pub\/sub, Lua scripts, pipelines).<\/li>\n<li>En entornos de alta concurrencia, consider\u00e1 un lock distribuido para evitar <em>cache stampede<\/em>.<\/li>\n<\/ul>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Redis lleva el patr\u00f3n Cache-Aside al siguiente nivel: permite que todas las instancias de tu aplicaci\u00f3n compartan el mismo cach\u00e9 de forma eficiente y consistente. El patr\u00f3n en s\u00ed no cambia: verificar el cach\u00e9 primero, cargar desde la base de datos solo si es necesario.<\/p>\n<p>La elecci\u00f3n entre <code>IMemoryCache<\/code> y Redis depende de la escala y los requisitos de tu sistema. Para desarrollo local y aplicaciones de instancia \u00fanica, <code>IMemoryCache<\/code> es m\u00e1s que suficiente. Para producci\u00f3n con m\u00faltiples r\u00e9plicas o contenedores, Redis es la opci\u00f3n natural.<\/p>\n<p>Implementar ambas estrategias con el mismo patr\u00f3n Cache-Aside demuestra una de las grandes fortalezas de ASP.NET Core: la abstracci\u00f3n correcta permite cambiar la implementaci\u00f3n sin reescribir la l\u00f3gica de negocio.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aprende a implementar el patron Cache-Aside en .NET usando Redis como cache distribuida. Comparamos IDistributedCache vs StackExchange.Redis con ejemplos practicos.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_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}},"categories":[1],"tags":[38,359,412,39,419,316,421,65,420],"class_list":["post-1321","post","type-post","status-publish","format-standard","hentry","category-blog","tag-net","tag-asp-net-core","tag-backend","tag-c","tag-cache-aside","tag-caching","tag-patrones-de-diseno","tag-performance","tag-redis"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables &#183; devops Mauro Bernal<\/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:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables &#183; devops Mauro Bernal\" \/>\n<meta property=\"og:description\" content=\"Aprende a implementar el patron Cache-Aside en .NET usando Redis como cache distribuida. Comparamos IDistributedCache vs StackExchange.Redis con ejemplos practicos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/\" \/>\n<meta property=\"og:site_name\" content=\"devops Mauro Bernal\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-28T11:33:14+00:00\" \/>\n<meta name=\"author\" content=\"Mauro Bernal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:site\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mauro Bernal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\\\/\"},\"author\":{\"name\":\"Mauro Bernal\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"headline\":\"Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables\",\"datePublished\":\"2026-03-28T11:33:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\\\/\"},\"wordCount\":632,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"keywords\":[\".NET\",\"ASP.NET Core\",\"Backend\",\"c#\",\"Cache-Aside\",\"caching\",\"Patrones de Diseno\",\"performance\",\"Redis\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\\\/\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\\\/\",\"name\":\"Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables &#183; devops Mauro Bernal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-28T11:33:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\",\"name\":\"devops Mauro Bernal\",\"description\":\"Cuando tu trabajo es hacer que las cosas funcionen bien...\",\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\",\"name\":\"Mauro Bernal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"width\":1740,\"height\":1740,\"caption\":\"Mauro Bernal\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\"},\"description\":\"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman\",\"sameAs\":[\"https:\\\/\\\/maurobernal.com.ar\",\"https:\\\/\\\/x.com\\\/_maurobernal\",\"https:\\\/\\\/youtube.com\\\/maurobernal\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables &#183; devops Mauro Bernal","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:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/","og_locale":"es_ES","og_type":"article","og_title":"Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables &#183; devops Mauro Bernal","og_description":"Aprende a implementar el patron Cache-Aside en .NET usando Redis como cache distribuida. Comparamos IDistributedCache vs StackExchange.Redis con ejemplos practicos.","og_url":"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/","og_site_name":"devops Mauro Bernal","article_published_time":"2026-03-28T11:33:14+00:00","author":"Mauro Bernal","twitter_card":"summary_large_image","twitter_creator":"@_maurobernal","twitter_site":"@_maurobernal","twitter_misc":{"Escrito por":"Mauro Bernal","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/#article","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/"},"author":{"name":"Mauro Bernal","@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"headline":"Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables","datePublished":"2026-03-28T11:33:14+00:00","mainEntityOfPage":{"@id":"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/"},"wordCount":632,"commentCount":0,"publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"keywords":[".NET","ASP.NET Core","Backend","c#","Cache-Aside","caching","Patrones de Diseno","performance","Redis"],"articleSection":["Blog"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/","url":"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/","name":"Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables &#183; devops Mauro Bernal","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#website"},"datePublished":"2026-03-28T11:33:14+00:00","breadcrumb":{"@id":"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maurobernal.com.ar\/blog\/cache-aside-pattern-con-redis-en-net-cache-distribuida-para-entornos-escalables\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/maurobernal.com.ar\/blog\/"},{"@type":"ListItem","position":2,"name":"Cache-Aside Pattern con Redis en .NET: Cache Distribuida para Entornos Escalables"}]},{"@type":"WebSite","@id":"https:\/\/maurobernal.com.ar\/blog\/#website","url":"https:\/\/maurobernal.com.ar\/blog\/","name":"devops Mauro Bernal","description":"Cuando tu trabajo es hacer que las cosas funcionen bien...","publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/maurobernal.com.ar\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283","name":"Mauro Bernal","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","url":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","contentUrl":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","width":1740,"height":1740,"caption":"Mauro Bernal"},"logo":{"@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1"},"description":"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman","sameAs":["https:\/\/maurobernal.com.ar","https:\/\/x.com\/_maurobernal","https:\/\/youtube.com\/maurobernal"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/comments?post=1321"}],"version-history":[{"count":0,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1321\/revisions"}],"wp:attachment":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/media?parent=1321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/categories?post=1321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/tags?post=1321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}