Aby zrobić coś nieco podobnego do „auto_increment”, spojrzałbym na funkcję INCR:
http://redis.io/commands/incr
Zwiększy wartość, zwracając nową wartość - i jest niepodzielna (jak większość/wszystkie polecenia Redis), więc nie musisz się martwić problemami z wątkami. Więc twoje kroki byłyby mniej więcej takie:
- USTAW klucz przyrostu.
- Gdy chcesz dodać wartość, INCR klucz i USTAW nową wartość za pomocą zwróconej wartości INCR.
- INCR w tym momencie zwiększył wartość klucza inkrementacji, więc każde powtarzające się wstawienie wartości będzie używać „następnego” numeru.
Jeśli chcesz przechowywać listę elementów, które można przeglądać według indeksu, prawdopodobnie chcesz zrobić coś takiego (w programowaniu pseudokodu):
// 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)
W tym przykładzie zakładam, że w swoim programie śledzisz wartości zwracane przez INCR. Wartość zwracana przez INCR będzie indeksem, w którym wstawisz nowy element, a także indeksem, za pomocą którego będziesz później wyszukiwać swój element. Tak więc w moim przykładowym kodzie zastąp (wartość indeksu) przechowywaną wartością otrzymaną z INCR (jak to zrobisz, zależy oczywiście od używanego języka programowania).
Zauważ, że pozwala to na usunięcie elementów w środku, poprzez DEL myList:(index value)
, ponieważ śledzisz ostatni indeks z index
, więc nawet jeśli element zostanie usunięty, ostatni indeks pozostanie taki sam - zachowuje się to bardzo podobnie do pól „automatycznego przyrostu” w większości serwerów SQL.
Naprawdę nie chcesz używać do tego zestawów; zestawy są z natury nieuporządkowane i tak naprawdę nie są stworzone do wyszukiwania rzeczy po "kluczu" - przedmioty w zestawie nawet tak naprawdę nie mają klucza. Zestawy są bardziej przydatne w przypadku innych operacji na zestawach, które można na nich wykonać, takich jak SINTER lub SDIFF.