[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
PHP e Redis
1. PHP e o cache sofisticado com
Redis
@Pv_Fusion
Paulo Victor L. L. Gomes
Analista de Sistemas, Pós-graduando em Engenharia de Sistemas, Zend Certified
Engineer PHP 5.3, contribuidor do PHPSP.
Voucher
TricaeNTM
2. Conhecendo o Redis
O Redis é um storage de dados schemaless, do
tipo tuple store ou key-value store, projetado para
armazenar dados na memória RAM e permitir
acesso fácil e extremamente rápido de qualquer
informação, através de uma API bastante rica e
simples de usar.
Versão estável 2.8.17 em 28/10/2014
3. Conhecendo o Redis
Open Source (BSD), criado por Salvatore
Sanfilippo (antirez) seu primeiro release foi em
Março de 2009. Foi comprado pela VMWare em
2010.
Versão estável 2.8.17 em 28/10/2014
4. Conhecendo o Redis
- Muito rápido
- Non-blocking I/O
- 100 000+ escrita/leitura por segundo
- Pequeno: 16 000 linhas de código C
- Complementa a camada de persistência
- API simples e completa
Versão estável 2.8.17 em 28/10/2014
5. Conhecendo o Redis
Referenciado em muitas literaturas como data
structure server, por permitir o armazenamento
de dados simples, como Strings e números, até
estruturas de dados complexas, como Lists, Sets,
Hashes e Sorted Sets.
Versão estável 2.8.17 em 28/10/2014
6. Quem está usando o Redis?
Fonte: http://redis.io/topics/whos-using-redis 30/10/2014
7. Mas e o Memcached?
O Redis assim como o Memcached é um
poderoso storage de dados na RAM, mas
implementa alguns recursos adicionais como
transactions, pipeline, data type, publish-subscribe
pattern, restore do dataset,
replicação, entre outros.
http://redis.io/documentation
8. E a segurança?
- Porta para conexões na interface de rede
- Regras básicas de segurança são válidas
como binde no localhost, iptables…
- Permite que conexões sejam autenticadas
antes que qualquer query seja executada
Guia de boas práticas de segurança com Redis
http://redis.io/topics/security
9. Instalação
Instale algumas dependências:
Debian / Ubuntu e variações
Fedora / Centos / RHEL
$ sudo apt-get update
$ sudo apt-get install build-essential
automake tcl8.5-dev
$ sudo yum install gcc make jemalloc-devel
lua-devel hiredis-devel
Depois é só instalar:
$ wget http://download.redis.io/redis-stable.tar.gz
$ tar xzf redis-stable.tar.gz
$ cd redis-stable
$ make
$ sudo make install
10. Console
Subir o Redis:
redis-server
Acessar o console:
redis-cli
Acessar o console informando o host e a porta
redis-cli -h NOMEHOST -p PORTA
15. Padronizando chaves
- Chaves podem conter espaço em branco mas… Não faça isso
- Chaves curtas performam melhor
- Curta mas com significado
- Separe utilizando dois pontos “ : “
- Convenção: tipo-de-objeto:id:campo
user:8:username = chaves
user:71:username = clotilde
- SHA1(data)
16. Console - Comandos Atomicos
- GETSET [chave valor]
- Define novo valor retornando o valor anterior
- SETNX [chave valor]
- Falha se a chave já esta definida
- MSETNX [chave1 valor1 chave2 valor2 chave3 valor4]
- Falha se alguma chave já existir
17. Configuração
O Redis pode ser iniciado sem um arquivo de configuração usando uma
configuração padrão built-in, no entanto, esta configuração é
recomendada apenas para fins de teste e desenvolvimento.
Subindo o redis para testes
redis-server
A maneira correta de configurar o Redis é fornecendo um arquivo de configuração,
normalmente chamado de redis.conf.
Subindo o redis informando suas configurações
redis-server redis.conf
18. Configuração
O que podemos configurar no redis.conf ?
- Porta de comunicação (port)
- Timeout de cliente (timeout)
- Verbosidade de log do server (loglevel)
- Snapshotting (save)
- Nome do arquivo onde persistir o DB (dbfilename)
- Replicação (slave-serve-stale-data, slave-read-only, repl-disable-tcp-nodelay,
slave-priority)
- Senha de autenticação (requirepass)
- Limite de clientes (maxclients)
- Limite de tamanho (maxmemory)
http://redis.io/topics/config
19. E se o serviço parar?
O Redis suporta duas estratégias diferentes de
Backup/Restore de dados
- Snapshotting
- Log appending
20. Snapshotting
Também conhecida como RDB, a persistência
do dataset no disco respeita dois critérios
combinados: Tempo decorrido (em segundos)
e Quantidade de alterações realizadas no
dataset, a partir do último backup realizado.
save TEMPO QUANTIDADE
save 60 5
21. Snapshotting
Também conhecida como RDB, a persistência
do dataset no disco respeita dois critérios
combinados: Tempo decorrido (em segundos)
e Quantidade de alterações realizadas no
dataset, a partir do último backup realizado.
save TEMPO QUANTIDADE
save 60 5
24. Predis - Set e Get
<?php
require __DIR__.'/../autoload.php';
$server = array(
'host' => '127.0.0.1',
'port' => 6381
);
$client = new PredisClient($server);
/** @var PredisResponseStatus $returnOfSet */
$returnOfSet = $client->set('news:3543:url', 'http://news.com.br/tinky-winky-briga-com-dipsy-e-pede-demissao-dos-teletubbies.html');
$response = $client->get('news:3543:url');
var_export($response);
25. Predis - MSet e MGet
<?php
require __DIR__.'/../autoload.php';
$client = new PredisClient(array('host' => '127.0.0.1', 'port' => 6381));
$urls = array(
'news:3543:url' => 'http://news.com.br/tinky-winky-briga-com-dipsy-e-pede-demissao-dos-teletubbies.html',
'news:3544:url' => 'http://news.com.br/ze-dirceu-canta-macarena-e-vai-preso.html',
'news:3545:url' => 'http://news.com.br/spotify-pega-virus-nos-servidores-depois-de-adicionar-funk-brasileiro.html',
'news:3545:content' => 'O spotify se deu mal quando decidiu inserir funk no seu leque musical',
'news:3543:content' => 'Tinky Wink briga com Dipsy e pede demissão dos Teletubies, segundo informações a briga de
iniciou por conta do creminho gostoso',
);
$client->mset($urls);
$response = $client->mget(array('news:3543:url', 'news:3544:url', 'news:3545:url', 'news:3543:content'));
var_export($response);
echo PHP_EOL;
30. Bonus
- PERSIST (Remove expiração de chave)
- PEXPIRE (Insere expiração em chave)
- STRLEN (Tamanho armazenado na chave)
- RENAME (Renomeia a chave)
- TYPE (Verifica tipo armazenado na chave)
Todos os comandos:
http://redis.io/commands
32. Referências
Redis
http://redis.io/
NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence
by Pramod J. Sadalage & Martin Fowler.
The Little Redis Book by Karl Seguin.
App Redis Documentation by Kyle Banks.
Redis in Action (Manning, 2013) by Josiah L. Carlson (early access edition).
Instant Redis Optimization How-to (Packt, 2013) by Arun Chinnachamy.
Instant Redis Persistence (Packt, 2013) by Matt Palmer.