O Redis é um datastore ou armazenamento de dados open-source de chave-valor na memória. No Redis, uma lista é uma coleção de strings classificadas por ordem de inserção, semelhante a listas encadeadas. Este tutorial aborda como criar e trabalhar com elementos nas listas do Redis.
Este guia está no formato de referência rápida com trechos de linha de comando independentes. Recomendamos que você pule para qualquer seção que seja relevante para a tarefa que você está tentando concluir.
Os comandos mostrados neste guia foram testados em um servidor Ubuntu 18.04 executando a versão 4.0.9 do Redis. Para configurar um ambiente semelhante, você pode seguir o Passo 1 do nosso guia Como Instalar e Proteger o Redis no Ubuntu 18.04. Vamos demonstrar como esses comandos se comportam executando-os com redis-cli
, a interface de linha de comando do Redis. Observe que se você estiver usando uma interface Redis diferente — Redli, por exemplo — a saída exata de certos comandos pode ser diferente.
Como alternativa, você pode provisionar uma instância de banco de dados Redis gerenciada para testar esses comandos, mas observe que, dependendo do nível de controle permitido pelo seu provedor de banco de dados, alguns comandos neste guia podem não funcionar como descrito. Para provisionar um banco de dados gerenciado na DigitalOcean, siga nossa documentação de produto para Managed Databases. Então, você deve instalar ou o Redli ou configurar um túnel TLS para conectar-se ao banco de dados gerenciado por TLS.
Uma chave pode conter apenas uma lista, embora qualquer lista possa conter mais de quatro bilhões de elementos. O Redis lê listas da esquerda para a direita e você pode adicionar novos elementos ao cabeçalho de uma lista (a extremidade “esquerda”) com o comando lpush
ou a cauda (a extremidade" direita ") com rpush
. Você também pode usar lpush
ou rpush
para criar uma nova lista:
- lpush chave valor
Ambos os comandos produzirão um número inteiro mostrando quantos elementos estão na lista. Para ilustrar, execute os seguintes comandos para criar uma lista contendo o ditado “I think therefore I am”:
- lpush key_philosophy1 "therefore"
- lpush key_philosophy1 "think"
- rpush key_philosophy1 "I"
- lpush key_philosophy1 "I"
- rpush key_philosophy1 "am"
A saída do último comando mostrará:
Output(integer) 5
Observe que você pode adicionar vários elementos na lista com uma única instrução lpush
ou rpush
:
- rpush key_philosophy1 "-" "Rene" "Decartes"
Os comandos lpushx
e rpushx
também são usados para adicionar elementos às listas, mas só funcionarão se a lista fornecida já existir. Se um dos comandos falhar, retornará (integer) 0
:
- rpushx key_philosophy2 "Happiness" "is" "the" "highest" "good" "–" "Aristotle"
Output(integer) 0
Para alterar um elemento existente em uma lista, execute o comando lset
seguido pelo nome da chave, o índice do elemento que você deseja alterar e o novo valor:
- lset key_philosophy1 5 "sayeth"
Se você tentar adicionar um elemento de lista a uma chave existente que não contém uma lista, isso causará um choque nos tipos de dados e retornará um erro. Por exemplo, o seguinte comando set
cria uma chave que contém uma string, portanto a tentativa a seguir de adicionar um elemento de lista a ela com lpush
falhará:
- set key_philosophy3 "What is love?"
- lpush key_philosophy3 "Baby don't hurt me"
Output(error) WRONGTYPE Operation against a key holding the wrong kind of value
Não é possível converter chaves Redis de um tipo de dados para outro, portanto, para transformar key_philosophy3
em uma lista, você precisará excluir a chave e começar de novo com um comando lpush
ou rpush
.
Para recuperar um intervalo de itens em uma lista, use o comando lrange
seguido de um offset para começar e um offset para parar. Cada offset é um índice baseado em zero, o que significa que 0
representa o primeiro elemento da lista, 1
representa o próximo e assim por diante.
O comando a seguir retornará todos os elementos da lista de exemplo criada na seção anterior:
- lrange key_philosophy1 0 7
Output1) "I"
2) "think"
3) "therefore"
4) "I"
5) "am"
6) "sayeth"
7) "Rene"
8) "Decartes"
os offsets passados para o lrange
também podem ser números negativos. Quando usado neste caso, -1
representa o elemento final na lista, -2
representa o penúltimo elemento na lista e assim por diante. O exemplo a seguir retorna os três últimos elementos da lista mantida em key_philosophy1
:
- lrange key_philosophy1 -3 -1
Output1) "I"
2) "am"
3) "sayeth"
Para recuperar um único elemento de uma lista, você pode usar o comando lindex
. No entanto, este comando requer que você forneça o índice do elemento como argumento. Assim como o lrange
, o índice é baseado em zero, o que significa que o primeiro elemento está no índice 0
, o segundo está no índice 1
, e assim por diante:
- lindex key_philosophy1 4
Output"am"
Para descobrir quantos elementos estão em uma determinada lista, use o comando llen
, que é a abreviação de “list length”:
- llen key_philosophy1
Output(integer) 8
Se o valor armazenado na chave fornecida não existir, o llen
retornará um erro.
O comando lrem
remove a primeira de um número definido de ocorrências que correspondem a um determinado valor. Para experimentar isso, crie a seguinte lista:
- rpush key_Bond "Never" "Say" "Never" "Again" "You" "Only" "Live" "Twice" "Live" "and" "Let" "Die" "Tomorrow" "Never" "Dies"
O exemplo de lrem
a seguir removerá a primeira ocorrência do valor "Live"
:
- lrem key_Bond 1 "Live"
Este comando produzirá o número de elementos removidos da lista:
Output(integer) 1
O número passado para um comando lrem
também pode ser negativo. O exemplo a seguir removerá as duas últimas ocorrências do valor "Never"
:
- lrem key_Bond -2 "Never"
Output(integer) 2
O comando lpop
remove e retorna o primeiro elemento, ou “o mais à esquerda” de uma lista:
- lpop key_Bond
Output"Never"
Da mesma forma, para remover e retornar o último elemento “mais à direita” de uma lista, use rpop
:
- rpop key_Bond
Output"Dies"
O Redis também inclui o comando rpoplpush
, que remove o último elemento de uma lista e o envia ao início de outra lista:
- rpoplpush key_Bond key_AfterToday
Output"Tomorrow"
Se as chaves de origem e destino passadas para o comando rpoplpush
forem as mesmas, elas essencialmente rotacionarão os elementos da lista.
Este guia detalha vários comandos que você pode usar para criar e gerenciar listas no Redis. Se houver outros comandos, argumentos ou procedimentos relacionados que você gostaria de ver descritos neste guia, peça ou faça sugestões nos comentários abaixo.
Para obter mais informações sobre comandos Redis, consulte nossa série de tutoriais Como Gerenciar um Banco de Dados Redis.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.