Para fazer algo vagamente semelhante a "auto_increment", eu examinaria a função INCR:
http://redis.io/commands/incr
Ele incrementará um valor, retornando o novo valor para você - e é atômico (como a maioria/todos os comandos Redis), então você não precisa se preocupar com problemas de encadeamento. Então seus passos seriam algo como:
- DEFINIR uma chave de incremento.
- Quando você quiser adicionar um valor, INCR a chave e SET seu novo valor usando o valor INCR retornado.
- INCR neste momento aumentou o valor da chave de incremento, portanto, qualquer inserção de valor repetida usará o número "próximo".
Se você deseja armazenar uma lista de itens que podem ser pesquisados por índice, provavelmente deseja fazer algo assim (em pseudocódigo de programação):
// When you initialize your database for the first time.
SET index "0"
// When you want to insert a new item:
INCR index
SET myList:(index value) "My Value"
// When you want to retrieve an item, and you have the index for it:
GET myList:(index value)
Neste exemplo, estou assumindo que em seu programa você está acompanhando os valores retornados pelo INCR. O valor que o INCR retorna será o índice no qual você insere o novo item, bem como o índice com o qual você pesquisará seu item posteriormente. Então, no meu código de exemplo, substitua (valor do índice) pelo valor armazenado que você recebeu do INCR (como você faz isso depende de qual linguagem de programação você está usando, é claro).
Observe que isso permite a exclusão de itens no meio, via
DEL myList:(index value)
, porque você está acompanhando o último índice com index
, portanto, mesmo que um item seja excluído, o último índice ainda permanecerá o mesmo - isso se comporta de maneira muito semelhante aos campos de "incremento automático" na maioria dos servidores SQL. Você realmente não quer usar conjuntos para isso; conjuntos são inerentemente desordenados, e eles não são realmente feitos para procurar as coisas por "chave" - os itens em um conjunto nem sequer têm uma chave. Sets são mais úteis para outras operações de set que você pode realizar neles, como SINTER ou SDIFF.