redis
Redis Keys
Szukaj…
Wprowadzenie
Przestrzeń klawiszy Redis może być traktowana jako tablica skrótów lub klucze mapowania słownika do struktur danych w bazie danych.
Redis zapewnia szeroki zakres poleceń, które działają z klawiszami do zarządzania przestrzenią klawiszy, w tym możliwość usuwania kluczy, sprawdzania metadanych kluczy, wyszukiwania kluczy i modyfikowania niektórych właściwości kluczy.
Składnia
- Wzór KLUCZY
- Klawisz PERSIST
- EXPIRE klawisz sekund
- Znacznik czasu EXPIREAT
- Klucz TTL
- Milisekundy klucza PEXPIRE
- Klucz PEXPIREAT milisekund-znacznik czasu
- Klucz PTTL
- Klawisz UNLINK [klawisz ...]
- Klawisz DEL [klawisz ...]
- SKANUJ kursor [wzór MATCH] [liczba COUNT]
Uwagi
W przypadku prawidłowych znaków w klawiszach Redis instrukcja całkowicie wyjaśnia :
Klucze Redis są bezpieczne binarnie, co oznacza, że możesz użyć dowolnej sekwencji binarnej jako klucza, od łańcucha takiego jak „foo” do zawartości pliku JPEG. Pusty ciąg jest również prawidłowym kluczem.
Kilka innych zasad dotyczących kluczy:
Bardzo długie klucze nie są dobrym pomysłem, na przykład klucz 1024 bajtów jest złym pomysłem nie tylko pod względem pamięci, ale także dlatego, że wyszukiwanie klucza w zbiorze danych może wymagać kilku kosztownych porównań kluczy. Nawet jeśli zadaniem jest dopasowanie dużej wartości, uciekanie się do jej mieszania (na przykład za pomocą SHA1) jest lepszym pomysłem, szczególnie z punktu widzenia pamięci i przepustowości.
Bardzo krótkie klawisze często nie są dobrym pomysłem. Nie ma sensu pisać „u1000flw” jako klucza, jeśli zamiast tego można napisać „użytkownik: 1000: obserwujący”. Ten ostatni jest bardziej czytelny, a dodana przestrzeń jest niewielka w porównaniu do przestrzeni używanej przez sam obiekt klucza i obiekt wartości. Podczas gdy krótkie klawisze zużyją oczywiście nieco mniej pamięci, Twoim zadaniem jest znalezienie właściwej równowagi.
Spróbuj trzymać się schematu. Na przykład „object-type: id” jest dobrym pomysłem, tak jak w „user: 1000”. Kropki lub myślniki są często używane w polach zawierających wiele słów, jak w „komentarz: 1234: odpowiedź.to” lub „komentarz: 1234: odpowiedź na”.
Maksymalny dozwolony rozmiar klucza to 512 MB.
Zachowaj ostrożność podczas używania polecenia KLUCZE w systemie produkcyjnym, ponieważ może to powodować poważne problemy z wydajnością. Jeśli musisz przeprowadzić wyszukiwanie w przestrzeni klawiszy, polecenia SKANUJ są lepszą alternatywą.
Ważne klucze
Klucze Redis są binarnie bezpieczne, więc dosłownie wszystko może być użyte jako klucz. Jedynymi ograniczeniami są to, że muszą być mniejsze niż 512 MB.
Przykłady prawidłowych kluczy:
7
++++
`~!@#$%^&*()-_=+
user:10134
search/9947372/?query=this%20is%20a%28test%29%20query
<div id="div64">
Any other string less than 512MB in size.
The raw binary content of an image or other binary file.
An entire multi-line text document.
An entire SQL query.
Any integer, hexadecimal, octal, or binary value.
Anything else you can think of less than 512MB in size.
Nieprawidłowe klucze Redis:
Anything larger than 512MB.
Kluczowe schematy nazewnictwa
W celu zachowania przejrzystości i łatwości konserwacji często zaleca się opracowanie systemu lub schematu do nazewnictwa kluczy Redis. Oto kilka przykładów popularnych i łatwych w utrzymaniu systemów nazywania kluczy:
user:10134
user:10134:favorites
user:10134:friends
user:10134:friends-of-friends
user:10134
user:10134/favorites
user:10134/friends
user:10134/friends.of.friends
user/10134
user/10134/favorites
user/10134/friends
user/10134/friends of friends
Pamiętaj, że chociaż dozwolone, większe klucze zużywają więcej pamięci i powodują krótsze czasy wyszukiwania, więc użycie klucza 500 MB może nie być świetnym pomysłem na wydajność. Lepszym pomysłem może być użycie skrótu SHA-1, SHA-256 lub MD5 dużego obiektu binarnego jako klucza:
image/9517bb726d33efdc503a43582e6ea2eea309482b
image52e9df0577fca2ce022d4e8c86b1eccb070d37bef09dec36df2fabbfa7711f5c
Lista wszystkich kluczy
Możesz wyświetlić listę wszystkich kluczy w bazie danych Redis, wykonując następujące polecenia z redis-cli:
KEYS *
Parametr dla KLUCZY jest wyrażeniem pasującym do wzorca w stylu globalnym. Przykłady obsługiwanych wzorców obejmują:
h?llo matches hello, hallo and hxllo
h*llo matches hllo and heeeello
h[ae]llo matches hello and hallo, but not hillo
h[^e]llo matches hallo, hbllo, ... but not hello
h[a-b]llo matches hallo and hbllo
Użycie polecenia KLUCZE * może mieć negatywny wpływ na wydajność, dlatego nie jest zalecane w przypadku instancji produkcyjnych. Użyj operacji SKANUJ, aby wyszukać klucze w kodzie produkcyjnym.
TTL i ważność klucza
Użytkownik może zarządzać wartościami ważności klucza poza poleceniami aktualizacji. Redis pozwala użytkownikowi określić bieżący czas aktywacji (TTL) klucza za pomocą polecenia TTL:
TTL key
To polecenie zwróci TTL klucza w sekundach lub zwróci wartości specjalne -1 lub -2. A -1 oznacza, że klucz jest trwały (nie wygasa), a -2 wskazuje, że klucz nie istnieje.
Klucz wygasający można utrwalić za pomocą polecenia PERSIST:
PERSIST KEY
a klucz trwały może zostać wygaśnięty za pomocą polecenia EXPIRE:
EXPIRE KEY seconds
Wygasnąć można również użyć do modyfikacji TTL istniejącego klucza. Alternatywnie możesz użyć polecenia EXPIREAT ze znacznikiem czasu UNIX, aby ustawić czas wygaśnięcia.
Istnieją milisekundowe wersje poleceń TTL, EXPIRE i EXPIREAT, które są poprzedzone literą P.
Kasowanie kluczy
Redis udostępnia dwie funkcje usuwania kluczy z bazy danych: usuwanie i rozłączanie.
Funkcja del usuwa jeden lub więcej kluczy z bazy danych. Polecenie del powoduje, że Redis natychmiast odzyskuje pamięć dla usuniętego klucza w bieżącym wątku wykonania. Czas wykonania del jest proporcjonalny do liczby pojedynczych elementów usuniętych ze wszystkich kluczy.
Funkcja unlink działa jak polecenie del, usuwa jeden lub więcej kluczy z bazy danych. Jednak w przeciwieństwie do polecenia del, pamięć wykorzystywana przez te klucze jest odzyskiwana asynchronicznie w innym wątku.
Skanowanie przestrzeni klucza Redis
Redis udostępnia polecenie SCAN, aby iterować klucze w bazie danych pasujące do określonego wzorca. Redis obsługuje dopasowanie wzorca stylu globu w poleceniu SKANUJ.
Polecenie SCAN zapewnia iterator oparty na kursorach w przestrzeni kluczy Redis. Iteracyjna sekwencja wywołań do SKANU zaczyna się od wykonania połączenia przez użytkownika z argumentem kursora ustawionym na 0. Wynikiem tego wywołania jest partia elementów i zaktualizowany kursor, który jest dostarczany do następnego wywołania SCAN. Ta iteracja trwa, dopóki Redis nie zwróci kursora 0.
Poniższa funkcja Pythona demonstruje podstawowe użycie SCAN:
def scan_keys(r, pattern):
"Returns a list of all the keys matching a given pattern"
result = []
cur, keys = r.scan(cursor=0, match=pattern, count=2)
result.extend(keys)
while cur != 0:
cur, keys = r.scan(cursor=cur, match=pattern, count=2)
result.extend(keys)
return result
Polecenie SCAN jest zalecanym sposobem wyszukiwania kluczy w bazie danych i jest zalecane w porównaniu z poleceniem KEYS *
.