Cheatsheet

Como Gerenciar Listas no Redis

Published on March 4, 2020
Português
Como Gerenciar Listas no Redis

Introdução

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.

Como Utilizar Este Guia

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.

Criando Listas

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:

  1. 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”:

  1. lpush key_philosophy1 "therefore"
  2. lpush key_philosophy1 "think"
  3. rpush key_philosophy1 "I"
  4. lpush key_philosophy1 "I"
  5. 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:

  1. 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:

  1. 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:

  1. 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á:

  1. set key_philosophy3 "What is love?"
  2. 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.

Recuperando Elementos de uma Lista

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:

  1. lrange key_philosophy1 0 7
Output
1) "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:

  1. lrange key_philosophy1 -3 -1
Output
1) "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:

  1. 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”:

  1. llen key_philosophy1
Output
(integer) 8

Se o valor armazenado na chave fornecida não existir, o llen retornará um erro.

Removendo Elementos de uma Lista

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:

  1. 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":

  1. 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":

  1. lrem key_Bond -2 "Never"
Output
(integer) 2

O comando lpop remove e retorna o primeiro elemento, ou “o mais à esquerda” de uma lista:

  1. lpop key_Bond
Output
"Never"

Da mesma forma, para remover e retornar o último elemento “mais à direita” de uma lista, use rpop:

  1. 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:

  1. 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.

Conclusão

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.

Learn more about our products

About the authors
Default avatar

Manager, Developer Education

Technical Writer @ DigitalOcean



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


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!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more