{"id":9906,"date":"2016-05-25T16:05:04","date_gmt":"2016-05-25T19:05:04","guid":{"rendered":"https:\/\/king.host\/blog\/?p=9906"},"modified":"2024-06-04T07:32:22","modified_gmt":"2024-06-04T10:32:22","slug":"alternative-php-cache-apc","status":"publish","type":"post","link":"https:\/\/king.host\/blog\/tecnologia\/alternative-php-cache-apc\/","title":{"rendered":"Conhecendo o Alternative PHP Cache (APC)"},"content":{"rendered":"<p>O APC \u00e9 um cache de opcode que pode aumentar exponencialmente o desempenho da sua aplica\u00e7\u00e3o.<\/p>\n<p><strong>Entendendo Opcode:<\/strong><\/p>\n<p>Quando realizada um requisi\u00e7\u00e3o para um script php, o engine do PHP&nbsp;l\u00ea o script e compila em bytecode. O bytecode est\u00e1 em um n\u00edvel intermedi\u00e1rio entre a linguagem de m\u00e1quina e o c\u00f3digo-fonte. Ele n\u00e3o \u00e9 um execut\u00e1vel, por\u00e9m pode ser interpretado por uma m\u00e1quina virtual, tendo&nbsp;maior portabilidade, pois independe da arquitetura do ambiente. No PHP,&nbsp;o bytecode gerado \u00e9 chamado de opcode. O APC guarda o cache em opcode, o qual \u00e9 reutilizado nas requisi\u00e7\u00f5es subsequentes, ou seja, ele busca um opcode, o qual est\u00e1 em n\u00edvel intermedi\u00e1rio e ser\u00e1 retornado de forma mais r\u00e1pida. Com isso, ele reduz o tempo de processamento e melhora o desempenho do site ou sistema significativamente.<\/p>\n<p><strong>Instala\u00e7\u00e3o:<\/strong><\/p>\n<p>Em distribui\u00e7\u00f5es como Ubuntu, voc\u00ea pode facilmente instalar o APC&nbsp; com o comando abaixo:<\/p>\n<p>sudo apt-get install php-apc<\/p>\n<p>Ap\u00f3s instalar, o APC vir\u00e1 com um script o apc.php, que pode ser utilizado para administra\u00e7\u00e3o do cache atrav\u00e9s de uma interface gr\u00e1fica. Para acessar este arquivo ser\u00e1 solicitada uma senha a qual pode ser definida dentro do arquivo.<\/p>\n<p><strong>Cache de objetos com APC:<\/strong><\/p>\n<p>Com APC voc\u00ea pode ter cache de objetos de uma forma simples, por padr\u00e3o as fun\u00e7\u00f5es do APC j\u00e1 fazem serializa\u00e7\u00e3o de objeto antes de inseri-lo no cache e desserializa\u00e7\u00e3o na hora de obt\u00ea-lo do cache. Para Inserir, basta fazer o seguinte:<\/p>\n<pre class=\"decode-attributes:false trim-whitespace:false trim-code-tag:false mixed:false show_mixed:false lang:default decode:true \">&lt;?php\n\n\/\/ classe para armazenar dados do usuario\n\nclass usuario {\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private $id;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private $nome;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private $email;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private $telefone;\n\n\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function setId($id) {\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;id = $id;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function getId() {\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $this-&gt;id;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }\n\n\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function setNome($nome) {\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;nome = $nome;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function getNome() {\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $this-&gt;nome;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }\n\n\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function setEmail($email) {\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;email = $email;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public function getEmail() {\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $this-&gt;email;\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }\n\n}\n\n\n\n\/\/ verifica se objeto consta no cache\n\nif ($usuario = apc_fetch('usuario')) {\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo \"Dados no Cache: \";\n\n} else {\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ criar cache para objeto usuario\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $usuario = new Usuario();\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $usuario-&gt;setId(1);\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $usuario-&gt;setNome('Fernando');\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $usuario-&gt;setEmail('fernando@xxxxx.com');\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ adicionar objeto usu\u00e1rio no cache\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apc_add('usuario', $usuario);\n\n}\n\n\n\necho \"&lt;pre&gt;\";\n\necho $usuario-&gt;getId() . PHP_EOL;\n\necho $usuario-&gt;getNome() . PHP_EOL;\n\necho $usuario-&gt;getEmail() . PHP_EOL;\n\necho \"&lt;\/pre&gt;\";\n\n\n\nPara limpar o cache voc\u00ea pode utilizar:\n\napc_delete('nome_vari\u00e1vel');\n\nPara limpar todo o cache OPCode voc\u00ea pode utilizar:\n\napc_clear_cache();\n<\/pre>\n<p><strong>Documenta\u00e7\u00e3o:<\/strong><\/p>\n<p>A documenta\u00e7\u00e3o pode ser encontrada diretamente no link <a href=\"http:\/\/php.net\/manual\/pt_BR\/book.apc.php\" target=\"_blank\" rel=\"noopener\">http:\/\/php.net\/manual\/pt_BR\/book.apc.php<\/a><\/p>\n<p><strong>Conclus\u00e3o:<\/strong><\/p>\n<p>Tendo em vista que o cache fica dentro da mem\u00f3ria RAM, voc\u00ea deve pesar a necessidade, o tamanho da aplica\u00e7\u00e3o e o que voc\u00ea tem de recursos dispon\u00edveis antes de utilizar este tipo de ferramenta, mas ao utilizar o conceito de cache de objetos de forma correta voc\u00ea obter\u00e1 um crescimento de desempenho de forma exponencial. A ferramenta em si oferece v\u00e1rias fun\u00e7\u00f5es que facilitam a cria\u00e7\u00e3o e manipula\u00e7\u00e3o de cache, com isso aumentando a velocidade de produ\u00e7\u00e3o ao utilizar o conceito.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O APC \u00e9 um cache de opcode que pode aumentar exponencialmente o desempenho da sua aplica\u00e7\u00e3o. Entendendo Opcode: Quando realizada um requisi\u00e7\u00e3o para um script php, o engine do PHP&nbsp;l\u00ea o script e compila em bytecode. O bytecode est\u00e1 em um n\u00edvel intermedi\u00e1rio entre a linguagem de m\u00e1quina e o c\u00f3digo-fonte. Ele n\u00e3o \u00e9 um [&hellip;]<\/p>\n","protected":false},"author":278,"featured_media":8871,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1179,8],"tags":[1374],"class_list":["post-9906","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento","category-tecnologia","tag-php"],"_links":{"self":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/9906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/users\/278"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/comments?post=9906"}],"version-history":[{"count":1,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/9906\/revisions"}],"predecessor-version":[{"id":31355,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/9906\/revisions\/31355"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media\/8871"}],"wp:attachment":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media?parent=9906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/categories?post=9906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/tags?post=9906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}