{"id":692,"date":"2010-04-14T00:16:03","date_gmt":"2010-04-14T03:16:03","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=692"},"modified":"2010-04-14T00:16:03","modified_gmt":"2010-04-14T03:16:03","slug":"uma-experiencia-bem-sucedida-com-o-memcached","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=692","title":{"rendered":"Uma experi\u00eancia bem sucedida com o Memcached"},"content":{"rendered":"<p><a href=\"http:\/\/www.memcached.org\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-693\" style=\"margin: 10px;\" title=\"memcache_logo\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/memcache_logo.png\" alt=\"\" width=\"76\" height=\"75\" \/><\/a>Memcached \u00e9 um sistema de cache em mem\u00f3ria distribuido <strong>muito<\/strong> f\u00e1cil de usar. Como recentemente tive uma experi\u00eancia maravilhosa com esta ferramenta acredito que \u00e9 interessante exp\u00f4-la neste post (prometo que o pr\u00f3ximo post ser\u00e1 sobre MongoDB). A natureza do Memcached \u00e9 extremamente gen\u00e9rica &#8211; trata-se de um servi\u00e7o de rede &#8211; sendo assim, o que descreverei pode ser aplicado sem grandes mudan\u00e7as a b\u00e1sicamente qualquer linguagem\/ambiente de execu\u00e7\u00e3o. Mas antes de falar sobre minha experi\u00eancia, vou falar um pouco sobre o funcionamento da criatura e como us\u00e1-lo com Java (consequentemente, com Groovy tamb\u00e9m).<\/p>\n<h2>Id\u00e9ia b\u00e1sica<\/h2>\n<p>Para muitos, o conceito de cache \u00e9 algo novo. Sendo assim, conv\u00e9m fazer uma introdu\u00e7\u00e3o ao conceito. Imagine que voc\u00ea possua um conjunto de informa\u00e7\u00f5es que repetidas vezes precise ser buscado na sua base de dados. A cada consulta, voc\u00ea precisa:<\/p>\n<ul>\n<li>Enviar a consulta (por exemplo: SQL)<\/li>\n<li>Esperar o processamento do SGBD<\/li>\n<li>Receber o resultado obtido<\/li>\n<li>Transform\u00e1-lo, tornando-o \u00fatil para sua aplica\u00e7\u00e3o<\/li>\n<\/ul>\n<p>O objetivo do cache \u00e9 evitar tempor\u00e1riamente os tr\u00eas \u00faltimos passos do procedimento que descrevi acima, retornando para o usu\u00e1rio o resultado do processamento dos dados em estado cru. Se 2 + 2 s\u00e3o 4, por que calcular este valor toda vez que voc\u00ea receber esta pergunta se \u00e9 poss\u00edvel armazenar apenas o resultado e reaproveit\u00e1-lo quando necess\u00e1rio?<\/p>\n<h2>O Servidor Memcached<\/h2>\n<p>O Memcached \u00e9 um servi\u00e7o de rede. No site oficial (<a href=\"http:\/\/www.memcached.org\" target=\"_blank\">http:\/\/www.memcached.org<\/a>) \u00e9 poss\u00edvel baixar a \u00faltima vers\u00e3o, que v\u00eam como c\u00f3digo fonte (veja este <a href=\"http:\/\/code.google.com\/p\/memcached\/wiki\/NewStart\" target=\"_blank\">link<\/a> para maiores detalhes sobre como proceder com a instala\u00e7\u00e3o). Se estiver usando Linux, instal\u00e1-lo \u00e9 ainda mais f\u00e1cil, visto que muito prov\u00e1velmente a criatura j\u00e1 estar\u00e1 dispon\u00edvel nos reposit\u00f3rios de sua distribui\u00e7\u00e3o.<\/p>\n<p>Instalado, basta executar o comando memcached para iniciar o servi\u00e7o. \u00c9 importante conhecer alguns par\u00e2metros, cuja listagem segue abaixo:<\/p>\n<p><strong>-m : <\/strong>quanta mem\u00f3ria (em Mbs) o Memcached ir\u00e1 usar. Caso omitido, o valor default \u00e9 64 Mb.<\/p>\n<p><strong>-p :<\/strong> qual a porta TCP a ser usada. Caso omitido, o valor default \u00e9 11211<\/p>\n<p><strong>-u :<\/strong> qual a porta UDP a ser usada. Como a porta TCP, o valor default \u00e9 11211 caso omitido.<\/p>\n<p><strong>-v :<\/strong> Modo verboso: o Memcached ir\u00e1 expor na tela o que est\u00e1 executando. \u00c9 bacana quando estamos aprendendo a usar o bichinho. Interessante mencionar que h\u00e1 duas outras op\u00e7\u00f5es: -vv (mais verboso) e -vvv (ainda mais verboso)<\/p>\n<p>Sendo assim, se eu executar o comando <em>memcached -m 540 -v -p 11000 -u 11000 <\/em>iniciar\u00e1 o servi\u00e7o\u00a0 com 540 Mb de mem\u00f3ria no modo verboso definindo como portas UDP e TCP a 11000.<\/p>\n<p>Como mencionei, o Memcached \u00e9 um servidor distribuido, mas como minha experi\u00eancia at\u00e9 o momento envolveu apenas uma inst\u00e2ncia ainda n\u00e3o tenho conhecimento suficiente para compartilhar.<\/p>\n<h2>O que \u00e9 e como \u00e9 armazenado<\/h2>\n<p>Pense no Memcached como uma tabela de hash gigante. Toda informa\u00e7\u00e3o individual armazenada possui basicamente 3 elementos:<\/p>\n<p><strong>Identificador: <\/strong>um texto com <strong>tamanho m\u00e1ximo de 250 caracteres<\/strong> que identifica um corpo de informa\u00e7\u00e3o. Equivale \u00e0 <em>chave prim\u00e1ria<\/em> com a qual j\u00e1 estamos acostumados a trabalhar no modelo relacional. N\u00e3o h\u00e1 regras com rela\u00e7\u00e3o ao seu valor: sendo assim, voc\u00ea \u00e9 livre para identificar suas informa\u00e7\u00f5es como quiser.<\/p>\n<p><strong>Tempo de dura\u00e7\u00e3o:<\/strong> o tempo (em segundos) que o Memcached manter\u00e1 esta informa\u00e7\u00e3o na mem\u00f3ria. <strong>O tempo m\u00e1ximo suportado \u00e9 30 dias.<\/strong><\/p>\n<p><strong>Corpo:<\/strong> a informa\u00e7\u00e3o em si. No caso do Memcached, esta possui <strong>tamanho m\u00e1ximo de 1 Mb<\/strong>. Se for pouco pra voc\u00ea, sempre \u00e9 poss\u00edvel dividir a sua informa\u00e7\u00e3o em mais de um bloco, compact\u00e1-la ou, se preferir, alterar o c\u00f3digo fonte do Memcached (eu o li inteiro, e \u00e9 BEM f\u00e1cil de entender (se voc\u00ea souber C)).<\/p>\n<p>Lembre-se: <strong>n\u00e3o se trata de um banco de dados<\/strong>. Tudo no Memcached, assim como na vida (s\u00f4ou po\u00e9tico!) \u00e9 passageiro. <span style=\"color: #ff0000;\">A id\u00e9ia \u00e9 evitar que tenhamos de acessar o SGBD, que \u00e9 um processo MUITO mais caro computacionalmente, e n\u00e3o substitui-lo!<\/span><\/p>\n<h2>O cliente Memcached<\/h2>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/10\/java_logo_2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-512\" title=\"java_logo_2\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/10\/java_logo_2.png\" alt=\"\" width=\"175\" height=\"233\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/10\/java_logo_2.png 250w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/10\/java_logo_2-225x300.png 225w\" sizes=\"(max-width: 175px) 100vw, 175px\" \/><\/a>O primeiro passo \u00e9 escolher qual biblioteca cliente usar para acessar o Memcached. H\u00e1 diversas, implementadas em tudo o que voc\u00ea imaginar: C, C++, PHP, MySQL, Python, Perl, Ruby&#8230; No nosso caso, vou falar do <a href=\"http:\/\/code.google.com\/p\/spymemcached\/\" target=\"_blank\">SpyMemcached<\/a>, que \u00e9 um cliente para Java. Uma lista com &#8220;alguns&#8221; dos clientes dispon\u00edveis atualmente pode ser acessada neste <a href=\"http:\/\/code.google.com\/p\/memcached\/wiki\/Clients\" target=\"_blank\">link<\/a>.<\/p>\n<p>O SpyMemcached \u00e9 composto por\u00a0 um \u00fanico arquivo Jar, o que torna seu deploy muito simples. Basicamente o \u00fanico pacote que voc\u00ea vai precisar \u00e9 do <em>net.spy.memcached<\/em>.<\/p>\n<h3>Obtendo uma conex\u00e3o com o Memcached<\/h3>\n<p>Basta criar uma nova inst\u00e2ncia da classe MemcachedClient, tal como no exemplo abaixo:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\r\nMemcachedClient client =new MemcachedClient(AddrUtil.getAddresses(&quot;0.0.0.0:11211 10.10.10.69:11211&quot;));\r\n\r\n<\/pre>\n<p>Repare que passei dois servidores distintos. Usando este construtor voc\u00ea poder\u00e1 adicionar um ou mais servidores aonde ser\u00e3o feitas as suas buscas.<\/p>\n<h3>Buscando e inserindo informa\u00e7\u00f5es<\/h3>\n<p>Buscar e inserir informa\u00e7\u00f5es com o SpyMemcached \u00e9 simples. O c\u00f3digo abaixo \u00e9 quase que auto-explicativo.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\r\nMemcachedClient client =new  MemcachedClient(AddrUtil.getAddresses(&quot;localhost:11211&quot;));\r\n\r\n\/\/ O que irei armazenar no Memcached\r\nPessoa pessoa = new Pessoa();\r\npessoa.setNome(&quot;Kico&quot;);\r\npessoa.setCidade(&quot;BH&quot;);\r\n\r\n\/\/ Incluindo informa\u00e7\u00f5es\r\n\r\nclient.add(&quot;chave_pessoa&quot;, 120, pessoa);\r\n\r\n\/\/ Buscando a informa\u00e7\u00e3o\r\n\r\nPessoa noCache = (Pessoa) client.get(&quot;chave_pessoa&quot;);\r\n\r\n<\/pre>\n<p>Quando incluimos uma informa\u00e7\u00e3o no Memcached, devemos passar 3 par\u00e2metros: a chave de identifica\u00e7\u00e3o, o tempo em segundos e o que queremos armazenar. No caso de um objeto, este obrigat\u00f3riamente dever\u00e1 implementar a interface <em>java.io.Serializable<\/em>. Caso contr\u00e1rio ser\u00e1 disparada uma excess\u00e3o.<\/p>\n<p>J\u00e1 para obter a informa\u00e7\u00e3o, basta passar a chave que a identifica e em seguida fazer o type casting para o tipo desejado.<\/p>\n<p>Ah: e como fechar a conex\u00e3o com o servidor? Simples: execute o m\u00e9todo <em>shutdown()<\/em> da classe MemcachedClient.<\/p>\n<p>Conhecendo os m\u00e9todos abaixo da classe <em>MemcachedClient<\/em> voc\u00ea j\u00e1 pode come\u00e7ar a trabalhar (e bem) com o Memcached:<\/p>\n<p><strong>void <\/strong><strong>MemcachedClient.add(String chave, int segundos, Object valor):<\/strong> insere uma informa\u00e7\u00e3o no servidor Memcached.<span style=\"color: #ff0000;\"> Se j\u00e1 existir um valor definido para esta chave no servidor, este ser\u00e1 mantido pelo Memcached.<\/span><\/p>\n<p><strong>Object MemcachedClient.get(String chave): <\/strong>retorna um valor armazenado no Memcached<\/p>\n<p><strong>void MemcachedClient.shutdown():<\/strong> fecha a conex\u00e3o com o Memcached<\/p>\n<p><strong>void MemcachedClient.remove(String chave):<\/strong> remove uma informa\u00e7\u00e3o armazenada no servidor<\/p>\n<p><strong>void MemcachedClient.replace(String chave, int segundos, Object valor):<\/strong> substitui um valor armazenado no servidor.<\/p>\n<p><strong>Dica:<\/strong> aproveite ao m\u00e1ximo suas conex\u00f5es com o Memcached buscando o maior n\u00famero poss\u00edvel de registros, mas nunca se esque\u00e7a de fech\u00e1-las, pois o servi\u00e7o come\u00e7a a apresentar problemas quando o n\u00famero de conex\u00f5es simult\u00e2neas \u00e9 muito alto.<\/p>\n<h2>Minha experi\u00eancia<\/h2>\n<p>Eis a situa\u00e7\u00e3o: possuimos uma aplica\u00e7\u00e3o feita em Grails cuja base \u00e9 uma biblioteca escrita em Java. Esta biblioteca \u00e9 tamb\u00e9m usada por diversas aplica\u00e7\u00f5es executadas no ambiente desktop dentro da empresa.\u00a0 Fiz uma imagem que, espero, ilustre a situa\u00e7\u00e3o.<\/p>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/arquitetura_memcached.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-694\" title=\"arquitetura_memcached\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/arquitetura_memcached.png\" alt=\"\" width=\"356\" height=\"285\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/arquitetura_memcached.png 459w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/arquitetura_memcached-300x240.png 300w\" sizes=\"(max-width: 356px) 100vw, 356px\" \/><\/a>Em nosso servidor f\u00edsico aonde j\u00e1 se encontrava instalado o Tomcat aproveitei para colocar em execu\u00e7\u00e3o o servidor do Memcached.<\/p>\n<p>Como sou o pai da biblioteca legada que mencionei acima, a refatorei para que ao inv\u00e9s de usar a biblioteca de cache anterior, passasse a usar o Memcached.<\/p>\n<p>Em seguida, atualizei tanto a nossa aplica\u00e7\u00e3o Grails quanto os clientes desktop (nestas horas voc\u00ea come\u00e7a a AMAR o Java Webstart) e voil\u00e1: resultado imediato.<\/p>\n<p>Como todos acessam o mesmo servidor Memcached, no momento em que uma aplica\u00e7\u00e3o desktop ou\u00a0 web alimentam o servidor de cache, autom\u00e1ticamente todas as demais inst\u00e2ncias se beneficiam. Resultado? Nossa performance global aumentou no m\u00ednimo 3 vezes, e o n\u00famero de chamadas ao nosso SGBD diminuiu em aproximadamente 40%.<\/p>\n<p>\u00c9 importante mencionar\u00a0 que em nosso ambiente \u00e9 muito comum mais de um usu\u00e1rio concorrentemente necessitar do mesmo conjunto de informa\u00e7\u00f5es. Isto \u00e9 fundamental, pois caso contr\u00e1rio n\u00e3o teriamos um ganho de performance, mas sim\u00a0 perda, pois antes de executar uma consulta no SGBD, sempre seria feita uma busca no Memcached.<\/p>\n<p>\u00c9 fundamental lembrar o seguinte aqui: n\u00e3o temos um cache local, mas remoto. O ganho da performance \u00e9 obtido em grande parte porque n\u00e3o precisamos popular objetos, visto os mesmos j\u00e1 virem &#8220;prontos&#8221; do servidor para n\u00f3s.<\/p>\n<p>Antes do Memcached haviamos pensado s\u00e9riamente em usar o Terracota. Mas como nosso ambiente \u00e9 heterog\u00eaneo, e h\u00e1 programas escritos em .net, C\/C++, VB6 e PHP, o Memcached caiu como uma luva, pois assim podemos aproveitar a mesma estrutura (e dados!) entre estas diferentes plataformas de execu\u00e7\u00e3o\/desenvolvimento (claro, com os devidos cuidados para evitar a bagun\u00e7a).<\/p>\n<p>Recomendad\u00edssimo portanto o seu uso. Espero que este post seja \u00fatil aos que estejam interessados em usar a ferramenta.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Memcached \u00e9 um sistema de cache em mem\u00f3ria distribuido muito f\u00e1cil de usar. Como recentemente tive uma experi\u00eancia maravilhosa com esta ferramenta acredito que \u00e9 interessante exp\u00f4-la neste post (prometo que o pr\u00f3ximo post ser\u00e1 sobre MongoDB). A natureza do Memcached \u00e9 extremamente gen\u00e9rica &#8211; trata-se de um servi\u00e7o de rede &#8211; sendo assim, o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3,6,1],"tags":[],"class_list":["post-692","post","type-post","status-publish","format-standard","hentry","category-grails","category-java","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Uma experi\u00eancia bem sucedida com o Memcached - \/dev\/Kico<\/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:\/\/devkico.itexto.com.br\/?p=692\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Uma experi\u00eancia bem sucedida com o Memcached - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"Memcached \u00e9 um sistema de cache em mem\u00f3ria distribuido muito f\u00e1cil de usar. Como recentemente tive uma experi\u00eancia maravilhosa com esta ferramenta acredito que \u00e9 interessante exp\u00f4-la neste post (prometo que o pr\u00f3ximo post ser\u00e1 sobre MongoDB). A natureza do Memcached \u00e9 extremamente gen\u00e9rica &#8211; trata-se de um servi\u00e7o de rede &#8211; sendo assim, o [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=692\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2010-04-14T03:16:03+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2010\/04\/memcache_logo.png\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=692\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=692\",\"name\":\"Uma experi\u00eancia bem sucedida com o Memcached - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=692#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=692#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/memcache_logo.png\",\"datePublished\":\"2010-04-14T03:16:03+00:00\",\"dateModified\":\"2010-04-14T03:16:03+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=692#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=692\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=692#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/memcache_logo.png\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/memcache_logo.png\",\"width\":\"76\",\"height\":\"75\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=692#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Uma experi\u00eancia bem sucedida com o Memcached\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Uma experi\u00eancia bem sucedida com o Memcached - \/dev\/Kico","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:\/\/devkico.itexto.com.br\/?p=692","og_locale":"pt_BR","og_type":"article","og_title":"Uma experi\u00eancia bem sucedida com o Memcached - \/dev\/Kico","og_description":"Memcached \u00e9 um sistema de cache em mem\u00f3ria distribuido muito f\u00e1cil de usar. Como recentemente tive uma experi\u00eancia maravilhosa com esta ferramenta acredito que \u00e9 interessante exp\u00f4-la neste post (prometo que o pr\u00f3ximo post ser\u00e1 sobre MongoDB). A natureza do Memcached \u00e9 extremamente gen\u00e9rica &#8211; trata-se de um servi\u00e7o de rede &#8211; sendo assim, o [&hellip;]","og_url":"https:\/\/devkico.itexto.com.br\/?p=692","og_site_name":"\/dev\/Kico","article_published_time":"2010-04-14T03:16:03+00:00","og_image":[{"url":"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2010\/04\/memcache_logo.png"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=692","url":"https:\/\/devkico.itexto.com.br\/?p=692","name":"Uma experi\u00eancia bem sucedida com o Memcached - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=692#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=692#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/memcache_logo.png","datePublished":"2010-04-14T03:16:03+00:00","dateModified":"2010-04-14T03:16:03+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=692#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=692"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=692#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/memcache_logo.png","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/04\/memcache_logo.png","width":"76","height":"75"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=692#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Uma experi\u00eancia bem sucedida com o Memcached"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/692"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=692"}],"version-history":[{"count":11,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/692\/revisions"}],"predecessor-version":[{"id":705,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/692\/revisions\/705"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}