{"id":190,"date":"2020-09-14T07:06:12","date_gmt":"2020-09-14T07:06:12","guid":{"rendered":"https:\/\/softwareinformatico.com\/blog\/?p=190"},"modified":"2020-10-21T07:32:44","modified_gmt":"2020-10-21T07:32:44","slug":"para-que-sirve-redis","status":"publish","type":"post","link":"https:\/\/softwareinformatico.com\/blog\/para-que-sirve-redis\/","title":{"rendered":"\u00bfPara qu\u00e9 sirve redis?"},"content":{"rendered":"\n<p>Redis es un sistema de cacheado que <strong>permite almacenar informaci\u00f3n para luego volver a usarla a una velocidad incre\u00edble<\/strong>, en este post vamos a explicar \u00abpara qu\u00e9 sirve redis\u00bb.<\/p>\n\n\n\n<p><strong>La principal funcionalidad de redis es mejorar la <a href=\"https:\/\/softwareinformatico.com\/optimizacion-web\/\">optimizaci\u00f3n web<\/a><\/strong>, ya que trabaja directamente en memoria a diferencia de la carga en Bases de Datos que se almacenan en discos duros.<\/p>\n\n\n\n<p>Mucha gente no entiende la potencia que ofrece redis ni como usarlo. <strong>Redis deber\u00eda estar siempre en nuestra aplicaci\u00f3n, si existen llamadas a la Base de Datos recurrentes.<\/strong> <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplos de uso de redis.<\/h2>\n\n\n\n<p>Como la teor\u00eda sin ejemplos no sirve de nada, os muestro posibles casos de uso, aunque luego os mostrar\u00e9 ejemplos reales de c\u00e1lculos para que todav\u00eda lo entend\u00e1is mejor:<\/p>\n\n\n\n<pre class=\"wp-block-verse\"><em>Imaginaros una inmobiliaria online que vende o alquila casas, para cada usuario que visita la propiedad tiene que acceder a la base de datos y cargar la informaci\u00f3n m\u00e1s todos los posibles c\u00e1lculos relacionados (precio, servicios, habitaciones etc.)<br>Fijaros cada visita la cantidad de peticiones y procesamiento innecesario que produce de forma innecesaria porque la informaci\u00f3n de la casa siempre es la misma.<\/em><\/pre>\n\n\n\n<p><strong>\u00bfC\u00f3mo se usar\u00eda redis en este caso?<\/strong> Pues una vez tenemos toda la informaci\u00f3n de la propiedad, se guardar\u00eda en redis asign\u00e1ndole una clave, como el id de propiedad. El tiempo de expiraci\u00f3n indica cuanto estar\u00e1 la informaci\u00f3n almacenada en el sistema.<br><br><em>Ejemplo de guardado: propiedad_4056. Con un tiempo de expiraci\u00f3n de 1 mes.<\/em><br><br>Para la siguiente vez que un usuario visite esa casa, habr\u00eda que buscar en redis si tenemos id 4056 almacenado, en caso afirmativo, se carga y muestra directamente. <\/p>\n\n\n\n<div class=\"div_consulta_bordes\"><p class=\"text_ini\">Si necesitas ayuda, o tienes dudas sobre <a href=\"https:\/\/softwareinformatico.com\/\" title=\"aplicaciones inform\u00e1ticas\">aplicaciones inform\u00e1ticas<\/a> preg\u00fantanos, podemos ayudarte.<\/p><div class=\"creatutienda\"><a href=\"https:\/\/softwareinformatico.com\/consulta-informatica\/\" title=\"consulta informatica\">CONSULTA INFORMATICA<\/a><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo pr\u00e1ctico de Redis.<\/h2>\n\n\n\n<p>Tenemos una tabla de errores de 16000 filas, vamos a hacer una carga de todas desde la Base de Datos, un guardado de todas en redis y una carga de todas en redis, analizando tiempos. El c\u00f3digo ser\u00eda el siguiente (est\u00e1 realizado en php):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\t\/\/Carga de la Base de Datos\n\t$callStartTime = microtime(true);\n\t$piques=$bd->query(\"SELECT id,fecha from errores order by id desc\");\n\t$callEndTime = microtime(true);\n\t$callTime = $callEndTime - $callStartTime;\n\t$tiempo='Base de Datos. El tiempo transcurrido ces de:  '.sprintf(\"%.4f\",$callTime).' seconds.&lt;br>';\n\techo  $tiempo;\n\n        \/\/Guardamos en redis\n\t$callStartTime = microtime(true);\n\t$nredis->setTemporalValue(\"prueba_tiempos\", 3600, serialize($piques));\n\t$callEndTime = microtime(true);\n\t$callTime = $callEndTime - $callStartTime;\n\t$tiempo='Redis Guardado. El tiempo transcurrido ces de:  '.sprintf(\"%.4f\",$callTime).' seconds.&lt;br>';\n\techo  $tiempo;\n\n\n        \/\/Cargamos de redis\n\t$callStartTime = microtime(true);\n\t$nredis->get(\"prueba_tiempos\");\n\t$callEndTime = microtime(true);\n\t$callTime = $callEndTime - $callStartTime;\n\t$tiempo='Redis Carga. El tiempo transcurrido ces de:  '.sprintf(\"%.4f\",$callTime).' seconds.&lt;br>';\n\techo  $tiempo;<\/code><\/pre>\n\n\n\n<p>Este ser\u00eda el resultado.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"437\" height=\"111\" src=\"https:\/\/softwareinformatico.com\/blog\/wp-content\/uploads\/2020\/09\/redis-tiempos.jpeg\" alt=\"redis tiempos\" class=\"wp-image-196\" srcset=\"https:\/\/softwareinformatico.com\/blog\/wp-content\/uploads\/2020\/09\/redis-tiempos.jpeg 437w, https:\/\/softwareinformatico.com\/blog\/wp-content\/uploads\/2020\/09\/redis-tiempos-300x76.jpeg 300w\" sizes=\"auto, (max-width: 437px) 100vw, 437px\" \/><\/figure><\/div>\n\n\n\n<p>Estamos hablando que<strong> la carga es 26 veces m\u00e1s r\u00e1pida desde redis que desde la base de datos<\/strong>. Son unas comparativas que os recomiendo que prob\u00e9is, porque con ellas tendr\u00e9is claro para qu\u00e9 sirve redis y ver\u00e9is que es una herramienta muy importante para usar. Sumando a todo esto la importancia cada vez mayor que tiene la velocidad en el <a href=\"https:\/\/softwareinformatico.com\/posicionamiento-en-google\/\">posicionamiento en google<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ventajas de redis.<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Tiempos de lectura y guardado super r\u00e1pidos.<br><br><\/li><li>Lo que cargas para un usuario lo usas para todos. El famoso \u00abtodos para uno y uno para todos\u00bb.<br><br><\/li><li>Tiene multitud de m\u00e9todos muy c\u00f3modos para trabajar con \u00e9l.<br><br><\/li><li>El volumen de informaci\u00f3n que puedes almacenar es bestial, nunca lo llenar\u00e1s si lo usas bien.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Consejos en el uso de redis.<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Siempre <strong>intenta almacenar en redis una vez que el objeto ya est\u00e9 totalmente cargado<\/strong> con toda su informaci\u00f3n, as\u00ed cuando lo vuelvas a usar la optimizaci\u00f3n web ser\u00e1 mucho m\u00e1s alta.<br><br><\/li><li><strong>Guarda siempre de forma individual<\/strong>, no guardes por ejemplo todas las casas de la Base de Datos directamente, es mejor almacenarlas una a una en claves separadas, as\u00ed si tienes que modificar, eliminar o cargar, solo lo haces con la necesaria. Adem\u00e1s, en un futuro tu web ser\u00e1 mucho m\u00e1s escalable.<br><br><br><\/li><li><strong>Intenta usar tiempos de expiraci\u00f3n bastante altos<\/strong>. Si la informaci\u00f3n no va a cambiar un mes es un tiempo incre\u00edble sin que se tenga que volver a pedir a la Base de Datos.<br><br><\/li><li><strong>Serializa (los convierte en cadena de texto) tus objetos siempre antes de guardarlos<\/strong> y deserializalos cuando vayas a cargarlos. En php con el m\u00e9todo serialize.<br><br><\/li><li>Todo lo que puedas almacenar en redis que te evite llamadas o procesamiento \u00fasalo.<br><br><\/li><li>Desde aqu\u00ed puedes acceder al <a href=\"https:\/\/redis.io\/\" rel=\"nofollow\">proyecto Redis<\/a><\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Redis es un sistema de cacheado que permite almacenar informaci\u00f3n para luego volver a usarla a una velocidad incre\u00edble, en este post vamos a explicar <a class=\"mh-excerpt-more\" href=\"https:\/\/softwareinformatico.com\/blog\/para-que-sirve-redis\/\" title=\"\u00bfPara qu\u00e9 sirve redis?\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":199,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[18,17,19],"class_list":["post-190","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion-web","tag-cache-web","tag-redis-cache","tag-redis-php"],"_links":{"self":[{"href":"https:\/\/softwareinformatico.com\/blog\/wp-json\/wp\/v2\/posts\/190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/softwareinformatico.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/softwareinformatico.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/softwareinformatico.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/softwareinformatico.com\/blog\/wp-json\/wp\/v2\/comments?post=190"}],"version-history":[{"count":0,"href":"https:\/\/softwareinformatico.com\/blog\/wp-json\/wp\/v2\/posts\/190\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/softwareinformatico.com\/blog\/wp-json\/wp\/v2\/media\/199"}],"wp:attachment":[{"href":"https:\/\/softwareinformatico.com\/blog\/wp-json\/wp\/v2\/media?parent=190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/softwareinformatico.com\/blog\/wp-json\/wp\/v2\/categories?post=190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/softwareinformatico.com\/blog\/wp-json\/wp\/v2\/tags?post=190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}