Esse padrão (pattern) passado como parâmetro para o comando KEYS
utiliza o Glob-style pattern matching [3]. Para exemplificar seu uso, imagine que tenhamos as chaves bala, bela, bola e bicicleta armazenadas.
Confira a seguir alguns exemplos de como usar esse pattern para buscar de-
terminadas chaves:
O caractere * representa um conjunto de caracteres que podem ser zero
ou mais caracteres. Exemplo: b*a encontraria bala, bela, bola e
bicicleta;
O caractere ? representa um único caractere. Exemplo: b?la encon-
traria bala, bela e bola;
Colchetes
[] representam um grupo de caracteres.
Exemplo:
b[ae]la encontraria bala e bela.
20
Casa do Código
Capítulo 3. Redis no mundo real Parte 1
Por exemplo, veja como podemos usar esse comando para obter todas as
chaves armazenadas no Redis independente de seu tipo, conforme o exemplo
a seguir feito no CLI:
redis 127.0.0.1:6379> KEYS *
1) "resultado:04-09-2013:megasena"
2) "resultado:07-09-2013:megasena"
3) "resultado:megasena"
4) "resultado:21-09-2013:megasena"
5) "resultado:02-10-2013:megasena"
Quando
usamos o caractere * sozinho como pattern para o comando
KEYS, estamos dizendo para o Redis que queremos todas as chaves armaze-
nadas.
Ainda no CLI, vamos ver como podemos obter todas as chaves que utili-
zam o nosso novo padrão resultado:dd-mm-yyyy:megasena. Mas além
disso, vamos obter apenas as chaves cujo dia esteja entre 01 e 09:
redis 127.0.0.1:6379> KEYS resultado:0?-*-*:megasena
1) "resultado:04-09-2013:megasena"
2) "resultado:07-09-2013:megasena"
3) "resultado:02-10-2013:megasena"
Esse mesmo pattern poderia ser escrito de outras formas, conforme a lista
apresentada a seguir, mas ainda assim também produziram o mesmo resul-
tado apresentado anteriormente.
KEYS resultado:0?-??-????:megasena
KEYS resultado:0*-??-????:megasena
KEYS resultado:0?-*-????:megasena
KEYS resultado:0*-*-????:megasena
KEYS resultado:0?-??-*:megasena
KEYS resultado:0*-??-*:megasena
KEYS resultado:0?-*:megasena
KEYS resultado:0*-*:megasena
Agora que já entendemos como utilizar o comando KEYS para obtermos
apenas as chaves que desejamos, a tarefa de filtrar os resultados por mês e ano do sorteio ficou fácil. Dando continuidade ao nosso exemplo, vamos escrever 21
3.2. Encontrando as chaves armazenadas
Casa do Código
um método em Java que realize a tarefa de filtrar os resultados da página de histórico, conforme o exemplo a seguir:
public class FiltrarHistoricoDaMegaSena {
public Set<String> filtrarResultados(int mes, int ano) {
String chave = "resultado:*-%02d-%04d:megasena";
Jedis jedis = new Jedis("localhost");
return jedis.keys(String.format(chave, mes, ano));
}
public static void main(String[] args) {
int mes = 10;
int ano = 2013;
Set<String> chaves =
new FiltrarHistoricoDaMegaSena()
.filtrarResultados(mes, ano);
System.out.println(chaves);
}
}
O exemplo de uso do código anterior apresentará quando executado o
resultado:
[resultado:02-10-2013:megasena]
Exercícios sobre Strings
1) O comando MGET retorna os valores de várias chaves de uma única vez,
assim como o MSET que utilizamos anteriormente. Utilize-o para obter
todas as chaves armazenadas no Redis.
2) O comando STRLEN retorna o tamanho do valor associado a uma chave
que ele recebe como parâmetro. Utilize-o para descobrir o tamanho do
valor correspondente a chave resultado_megasena.
22
Casa do Código
Capítulo 3. Redis no mundo real Parte 1
3) O comando GETRANGE retorna um pedaço do valor associado a uma
chave de acordo com uma posição inicial e uma posição final (até a ver-
são 2.0 do Redis esse comando era chamado SUBSTR). Utilize-o para
obter os dois primeiros números (2, 13) armazenados na chave resul-
tado_megasena.
Referência rápida de comandos para Strings
APPEND chave valor adiciona o valor a uma chave existente, ou
cria uma nova chave (caso esta ainda não exista) com seu respectivo
valor;
DEL chave [chave ...] remove a(s) chave(s) informada(s) e
seu(s) respectivo(s) valor(es);
GET chave retorna o valor correspondente à chave informada;
GETRANGE chave inicio fim retorna uma parte da string ar-
mazenada conforme a chave informada;
MGET chave [chave ...] retorna os valores correspondentes
às chaves informadas;
MSET chave valor [chave valor ...] armazena um ou
mais conjuntos de chave valor. Caso uma chave informada já exista,
seu valor será sobrescrito pelo novo;
SET chave valor armazena a chave e seu respectivo valor. Caso
já exista uma chave definida, seu valor é sobrescrito;
STRLEN chave retorna o tamanho da string armazenada conforme
a chave informada.
3.3
Utilizando hashes
No Redis, um hash nada mais é do que um map que contém campos e valores
do tipo string. Este tipo de dado é muito utilizado para representar objetos 23
3.3. Utilizando hashes
Casa do Código
definidos em nossas aplicações, como por exemplo um usuário que contém
um nome, e-mail e data de nascimento. Cada hash pode armazenar mais de
4 bilhões de
pares de campo-valor [1].