Writing Um blog. Viagem, diversão, cultura, curiosidades, dia-a-dia. Papo à toa.


Redis - entendendo e configurando, com high availability (HA)

otavio publicou em 28/01, 02:49 hs , e editou pela última vez há mais de 10 anos atrás.

O Redis é um banco de dados do tipo par de chaves e valores. Sua principal característica é a velocidade de acesso e gravação. Isso por ser, basicamente um banco em memória. Mas isso é outras coisas já foram explicadas em outro post.

Ser um banco em memória não quer dizer que não há persistência de dados (como pode ser visto aqui ). O que acontece é que o Redis salva as transações em um formato append only e, quando o tamanho do arquivo cresce muito, ele cria um dump da base e volta ao modelo append only.


(continua...)

Page Caching com dependências de expiração

otavio publicou em 22/10, 02:45 hs , e editou pela última vez há mais de 11 anos atrás.

Criando page caching com dependências ao invés de controle de tempo apenas

Além da expiração por tempo, uma forma útil é expirar por dependência. A dependência pode ser por alteração de um arquivo (no Rails se usava muito um touch em tmp/restart.txt para recarregar uma aplicação em produção) ou uma consulta que retornava um valor (ver mais aqui). Todas são interessantes e úteis em algum momento.


(continua...)

Caching no Yii - usando o cache dinâmico

otavio publicou em 04/10, 21:28 hs , e editou pela última vez há mais de 11 anos atrás.

Um dos melhores recursos de caching do Yii é o page caching, por seu padrão não obstrusivo do código. Mas esse recurso sozinho, em ambientes logados, é difícil de ser implementado. É comum (quase padrão) que aplicações tenham diferentes tipos de usuários (user roles).

Com isso, informações como o menu, a sidebar de usuário logado e informações específicas do mesmo caducariam com o uso simples do page caching. Ou passariamos a ter uma página de cache por cada tipo de usuário, e, às vezes, usuário por usuário.


(continua...)

Caching no Yii

otavio publicou em 04/10, 04:08 hs , e editou pela última vez há mais de 11 anos atrás.

O Yii, como todos os bons frameworks de desenvolvimento modernos, possui um conjunto de mecanismos para tornar o processo de cache mais simples.

A grande vantagem do uso de componentes de caching integrados não está na criação do cache. Criar, por exemplo, uma tabela de resumo de dados não é, nem de perto, ciência espacial. A grande vantagem é usar com agilidade a grande capacidade de mecanismos de expiração (seja por tempo total, seja por alguma trigger externa, como a atualização de algum dado usado no cache).

Não vamos aqui falar de aplicações como o Varnish , que funcionam como um proxy e muito usado em sites de alto tráfego com páginas abertas (como grandes sites de e-Commerce e de notícias).

Aqui vamos falar um pouco sobre o quando, o que e o como do uso de cache em sua aplicação, direcionado à solução proposta pelo Yii. Para que não fique muito extenso, alguns aspectos mais avançados serão colocados em posts subsequentes.

Algo importante é: cache é dado descartável e que pode ser gerado novamente a qualquer momento. Informações como: “quantos usuários existiam na base em janeiro?” ou “Com quantas lojas o vendedor X trabalhava em abril de 2012?” são informações que devem ser persistidas adequadamente para consulta futura.


(continua...)

Caching no Yii e Internacionalização (I18n)

otavio publicou em 04/10, 02:48 hs , e editou pela última vez há mais de 11 anos atrás.

Um recurso importante em seu projeto pode ser a Internacionalização (ou, abreviando, I18n). Em casos como esse, o caching de páginas deixa de ser simples. Ele tem que suportar as diferentes línguas do seu sistema.

Para que seu usuário americano não enxergue a página em português, uma dica é usar o varyByExpression comparando o atributo de linguagem da sessão do usuário. Como no exemplo abaixo:

public function filters()
{
 return array(
  'accessControl',
  array(
   'COutputCache + index, search',
   'duration' => 3600,
   varyByExpression => Yii::app()->language,
  ),
 );
}

if(typeof jQuery == 'undefined'){ document.write("