Primeiros passos com Redis e PHP para armazenamento rápido de dados
O popular mecanismo de armazenamento Redis é uma ferramenta excelente e obrigatória no arsenal de qualquer desenvolvedor de software. O mecanismo de armazenamento em memória permite armazenamento e recuperação de dados incrivelmente rápidos, até impressionantes 32 milhões de consultas por segundo, tornando-o um complemento principal para qualquer mecanismo de banco de dados principal.
Vamos mergulhar e aprender como acelerar nossas operações online.
Redis: prós x contras
O maior benefício do Redis é que ele é um armazenamento de dados puramente na memória , o que significa que é extremamente rápido, pois o banco de dados é armazenado na RAM, portanto, nenhuma operação de E / S de arquivo é necessária no disco rígido.
Outros benefícios agregados são sua simplicidade, suporte a clustering via Redis-cluster, além de seu suporte para oito tipos de dados diferentes, fornecendo a flexibilidade necessária para armazenar e gerenciar seus dados conforme necessário.
No entanto, sua maior desvantagem também é o fato de ser puramente um armazenamento de dados na memória, portanto, vem com limitações de tamanho. Depende da infraestrutura do seu servidor, mas para fins deste artigo e simplicidade, seu banco de dados Redis típico armazenará no máximo 2 a 4 GB de dados.
Isso significa que o Redis é usado para complementar os mecanismos de banco de dados popularmente usados, como mySQL, PostgreSQL e MongoDB, e não deve ser um substituto. Os principais usos do Redis incluem um cache, dados temporários / recentes que expiram em um curto período de tempo ou pequenos pedaços de dados que são acessados com frequência.
Como instalar o Redis
Supondo que você esteja executando o Ubuntu ou qualquer distribuição Linux que contenha o comando apt-get , para instalar o Redis, basta executar o seguinte comando no terminal:
sudo apt-get install redis-server
Em seguida, verifique se o Redis foi instalado com sucesso. No terminal, execute o comando:
redis-cli --version
Isso deve imprimir a versão do Redis que você está executando e, presumindo que sim, execute o seguinte comando para se conectar ao Redis:
redis-cli
Isso fornecerá um prompt do Redis não padrão dentro do terminal, que se parece com:
127.0.0.1:6379>
Comandos de string
Cada entrada no Redis é identificada por uma chave, que pode ser qualquer string sem espaço em branco que você desejar. Strings contêm apenas um único valor e, por exemplo, execute os seguintes comandos no prompt do Redis para definir um valor para algumas teclas.
127.0.0.1:6379> set full_name "John Doe"
127.0.0.1:6379> set units 5
Agora você pode listar todas as chaves atualmente no banco de dados Redis com o comando keys.
127.0.0.1:6379> keys *
Isso resultará na exibição das duas chaves que você definiu anteriormente, full_name e unidades . Você pode ver o valor dessas chaves com o comando get.
127.0.0.1:6379> get full_name
"John Doe"
127.0.0.1:6379> get units
5
A exclusão de chaves pode ser feita facilmente com o comando del.
127.0.0.1:6379> del full_name
Também é possível incrementar rapidamente um número inteiro com o comando hincrby . O seguinte irá incrementar a tecla "unidades" de 5 para 7.
127.0.0.1:6379> incrby units 2
Comandos de lista
As listas no Redis são arrays unidimensionais com uma ordem específica e permitem itens duplicados em diferentes posições da lista. Os itens podem ser adicionados à esquerda ou à direita de uma lista com os comandos lpush e rpush.
127.0.0.1:6379> lpush colors blue
127.0.0.1:6379> rpush colors red yellow green
Como você pode ver no exemplo acima, você pode enviar vários itens para uma lista em um único comando. Agora podemos ver todos os itens da lista usando o comando lrange .
127.0.0.1:6379> lrange colors 0 -1
Existem dois inteiros no final do comando, o primeiro que define a posição na lista para começar, e o segundo é o número de itens a serem retornados com -1 significando todos os itens. O resultado do comando acima será azul, vermelho, amarelo, verde .
Você também pode remover itens fora uma ou outra extremidade de uma lista usando os comandos lpop e RPOP.
127.0.0.1:6379> lpop colors
blue
127.0.0.1:6379> rpop colors
green
Você também pode obter o número de elementos em uma lista com o comando llen .
127.0.0.1:6379> llen colors
(integer) 2
Por último, você pode remover um elemento de uma lista por meio do comando lrem .
127.0.0.1:6379> lrem colors 1 green
(integer) 1
O comando lrem começa com o nome da lista, seguido pelo número de ocorrências a serem removidas e o nome do elemento a ser removido. Ele retornará o número de ocorrências encontradas e removidas da lista.
Comandos Hash
Um dos tipos de dados mais populares no Redis são os hashes, que permitem armazenar vários pares de valor-chave em uma única entrada. A chave ainda não precisa existir, e você define pares de valores-chave a qualquer momento com o comando hset .
127.0.0.1:6379> hset user:581 full_name "Jane Doe"
127.0.0.1:6379> hset user:581 points 500
Você também pode definir vários pares de valores-chave de um hash em um único comando usando o comando hmset .
127.0.0.1:6379> hmset user:581 email [email protected] gender F
O hash identificado pelo usuário- chave : 581 agora tem um total de quatro pares de valores-chave, todos os quais podem ser facilmente recuperados com o comando hgetall .
127.0.0.1:6379> hgetall user:581
1) "full_name"
2) "Jane Doe"
3) "points"
4) "500"
5) "email"
6) "[email protected]"
7) "gender"
8) "F"
Você também pode obter o valor de um único par de valores-chave dentro de um hash usando o comando get .
127.0.0.1:6379> hget user:581 email
"[email protected]"
Para quaisquer números inteiros dentro do hash, você pode incrementá-los por um valor especificado com o comando code hincrby .
127.0.0.1:6379> hincrby user:581 points 20
(integer) 520
O valor da chave points dentro do hash foi agora incrementado de 20 a 520. Um único par de valores-chave dentro de um hash pode ser excluído com o comando hdel .
127.0.0.1:6379> hdel user:581 gender
Como alternativa, você também pode excluir um hash totalmente, incluindo todos os pares de valores-chave, usando o comando del .
127.0.0.1:6379> del user:581
Chaves Redis expiradas
Outro excelente recurso do Redis é a capacidade de expirar chaves automaticamente após um número definido de segundos usando o comando expire . Observe que você só pode expirar chaves completas e não elementos singulares em uma lista ou hash. Por exemplo:
127.0.0.1:6379> expire full_name 10
Isso definirá um tempo de expiração de 10 segundos na chave full_name que você criou na seção de strings. Depois de executar o comando acima, espere 10 segundos e tente recuperar o valor da chave novamente.
127.0.0.1:6379> get full_name
(nil)
Como esperado, a chave agora expirou, portanto obtemos nulo como resultado.
Conecte-se ao Redis com PHP
Agora que você aprendeu o básico sobre como armazenar e recuperar dados com o Redis, é hora de conectá-lo ao seu software. Todas as linguagens de programação possuem módulos / extensões para Redis, mas, para este exemplo, usaremos PHP.
Você deve primeiro instalar a extensão PHP-Redis, pois ela não é instalada por padrão. Dentro do terminal, execute o comando.
sudo apt-get install php-redis
Uma vez instalado, certifique-se de reiniciar o PHP-fpm para que a extensão seja carregada corretamente. Aqui estão alguns códigos PHP que se conectam e fazem interface com o Redis.
<?php
// Connect to redis
$conn = new redis();
try {
$conn->connect('127.0.0.1', 6379, 5);
} catch (RedisException $e) {
die("Unable to connect to redis");
}
// Set string
$conn->set('country', 'Canada');
// Get string
$value = $conn->get('country');
echo "Country is: $value
";
// Define a profile
$profile = [
'username' => 'mike',
'full_name' => 'Mike Smith',
'email' => '[email protected]',
'country' => 'Australia'
];
// Create a hash
$conn->hmset('user:188', $profile);
// Get all values of the profile hash
$values = $conn->hgetall('user:188');
print_r($values);
// Get only the e-mail address
$email = $conn->hget('user:188', 'email');
echo "E-mail is: $email
";
// Expire the hash in 15 seconds
$conn->expire('user:188', 15);
O código de exemplo acima deve ser bastante simples. Primeiro, ele se conecta ao Redis com um tempo limite de 5 segundos e, a seguir, define e obtém uma string e um hash. Todos os comandos do Redis podem ser executados via OOP chamando-os diretamente do objeto Redis, conforme exemplo acima.
Você está no seu caminho!
Parabéns, você aprendeu o básico sobre como armazenar e recuperar dados com velocidade incrível por meio do mecanismo de armazenamento Redis, incluindo como se conectar e interagir com o Redis usando PHP.
Observe que este artigo cobre apenas o básico, e a página Tipos de dados do Redis da documentação é um ótimo lugar para continuar explorando o Redis e todas as suas funcionalidades.