Suche…


Einführung

Der Redis-Schlüsselbereich kann als Hash-Tabelle oder als Wörterbuch betrachtet werden, die Schlüssel zu Datenstrukturen in der Datenbank zuordnen.

Redis bietet eine Vielzahl von Befehlen, die mit Tasten zusammenarbeiten, um den Schlüsselbereich zu verwalten, einschließlich der Möglichkeit, Schlüssel zu entfernen, Schlüsselmetadaten zu untersuchen, nach Schlüsseln zu suchen und bestimmte Eigenschaften von Tasten zu ändern.

Syntax

  • KEYS-Muster
  • PERSISTASTE
  • Schlüssel in Sekunden ablaufen
  • EXPIREAT-Schlüsselzeitstempel
  • TTL-Taste
  • PEXPIRE-Schlüssel in Millisekunden
  • PEXPIREAT-Key-Millisekunden-Zeitstempel
  • PTTL-Taste
  • UNLINK-Taste [Taste ...]
  • DEL-Taste [Taste ...]
  • SCAN-Cursor [MATCH-Muster] [COUNT-Zähler]

Bemerkungen

Für gültige Zeichen in Redis-Tasten erklärt das Handbuch dies vollständig :

Redis-Schlüssel sind binärsicher. Dies bedeutet, dass Sie jede binäre Sequenz als Schlüssel verwenden können, von einem String wie "foo" bis zum Inhalt einer JPEG-Datei. Die leere Zeichenfolge ist auch ein gültiger Schlüssel.

Ein paar andere Regeln zu Schlüsseln:

Sehr lange Schlüssel sind keine gute Idee, zum Beispiel ist ein Schlüssel von 1024 Bytes nicht nur eine schlechte Idee, sondern auch, weil das Nachschlagen des Schlüssels im Dataset mehrere kostspielige Schlüsselvergleiche erfordert. Selbst wenn die Aufgabe darin besteht, das Vorhandensein eines großen Werts abzugleichen, ist es eine bessere Idee, auf Hashing (zum Beispiel mit SHA1) zurückzugreifen, insbesondere aus Sicht des Speichers und der Bandbreite.

Sehr kurze Tasten sind oft keine gute Idee. Es hat wenig Sinn, "u1000flw" als Schlüssel zu schreiben, wenn Sie stattdessen "user: 1000: followers" schreiben können. Letzteres ist besser lesbar und der hinzugefügte Speicherplatz ist kleiner als der vom Schlüsselobjekt selbst und vom Wertobjekt belegte Speicherplatz. Während kurze Tasten offensichtlich etwas weniger Speicher verbrauchen, ist es Ihre Aufgabe, die richtige Balance zu finden.

Versuchen Sie, bei einem Schema zu bleiben. Zum Beispiel ist "Objekttyp: ID" eine gute Idee, wie in "Benutzer: 1000". Punkte oder Bindestriche werden häufig für Felder mit mehreren Wörtern verwendet, z.

Die maximal zulässige Schlüsselgröße beträgt 512 MB.

Seien Sie vorsichtig, wenn Sie den Befehl KEYS gegen ein Produktionssystem verwenden. Dies kann zu schwerwiegenden Leistungsproblemen führen. Wenn Sie eine Suche gegen den Schlüsselbereich durchführen müssen, sind die SCAN- Befehle eine bessere Alternative.

Gültige Schlüssel

Redis-Schlüssel sind binärsicher, sodass buchstäblich alles als Schlüssel verwendet werden kann. Die einzigen Einschränkungen sind, dass sie weniger als 512 MB betragen müssen.

Beispiele für gültige Schlüssel:

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. 

Ungültige Redis-Schlüssel:

Anything larger than 512MB.

Schlüsselbenennungsschemata

Aus Gründen der Übersichtlichkeit und Wartungsfreundlichkeit wird häufig empfohlen, ein System oder ein Schema für die Benennung Ihrer Redis-Schlüssel zu entwickeln. Hier einige Beispiele für gängige und wartbare Systeme zum Benennen Ihrer Schlüssel:

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

Beachten Sie, dass größere Schlüssel zwar mehr Speicherplatz benötigen und die Suchzeiten verlangsamen, so dass die Verwendung eines Schlüssels mit 500 MB für die Leistung möglicherweise keine gute Idee ist. Eine bessere Idee könnte sein, stattdessen einen SHA-1-, SHA-256- oder MD5-Hash eines großen binären Objekts als Schlüssel zu verwenden:

image/9517bb726d33efdc503a43582e6ea2eea309482b
image52e9df0577fca2ce022d4e8c86b1eccb070d37bef09dec36df2fabbfa7711f5c

Alle Schlüssel auflisten

Sie können alle Schlüssel in einer Redis-Datenbank auflisten, indem Sie die folgenden Befehle von redis-cli ausführen:

KEYS *

Der Parameter für KEYS ist ein Muster, das mit einem Glob-Muster übereinstimmt. Beispiele für angenommene Muster sind:

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

Die Verwendung des Befehls KEYS * kann sich nachteilig auf die Leistung auswirken und wird daher nicht für Produktionsinstanzen empfohlen. Verwenden Sie die SCAN-Operation, um nach Schlüsseln im Produktionscode zu suchen.

TTL und Schlüsselablauf

Die Ablaufwerte eines Schlüssels können von einem Benutzer außerhalb der Aktualisierungsbefehle verwaltet werden. Mit Redis kann ein Benutzer die aktuelle Uhrzeit (TTL) eines Schlüssels mithilfe des TTL-Befehls ermitteln:

TTL key

Dieser Befehl gibt die TTL eines Schlüssels in Sekunden oder die Spezialwerte -1 oder -2 zurück. Ein -1 gibt an, dass der Schlüssel dauerhaft ist (wird nicht ablaufen) und ein -2 zeigt an, dass der Schlüssel nicht vorhanden ist.

Ein auslaufender Schlüssel kann mit dem Befehl PERSIST dauerhaft gemacht werden:

PERSIST KEY

Mit dem EXPIRE-Befehl kann ein dauerhafter Schlüssel abgelaufen werden:

EXPIRE KEY seconds

Mit Expire können Sie auch die TTL eines vorhandenen Schlüssels ändern. Alternativ können Sie den Befehl EXPIREAT mit einem UNIX-Zeitstempel verwenden, um eine Ablaufzeit festzulegen.

Es gibt Millisekundenversionen von TTL-, EXPIRE- und EXPIREAT-Befehlen, denen ein P vorangestellt ist.

Schlüssel löschen

Redis bietet zwei Funktionen zum Entfernen von Schlüsseln aus der Datenbank: del und unlink.

Die del-Funktion entfernt einen oder mehrere Schlüssel aus der Datenbank. Der Befehl del bewirkt, dass Redis den Speicher für den gelöschten Schlüssel im aktuellen Ausführungsthread sofort zurückfordert. Die Ausführungszeit für del ist proportional zur Anzahl der einzelnen Elemente, die aus allen Schlüsseln gelöscht wurden.

Die Unlink-Funktion verhält sich wie der Befehl del und entfernt einen oder mehrere Schlüssel aus der Datenbank. Im Gegensatz zum Befehl del wird jedoch jeder von diesen Schlüsseln verwendete Speicher asynchron für einen anderen Thread freigegeben.

Scannen des Redis Keyspace

Redis bietet den SCAN-Befehl, um die Schlüssel in der Datenbank zu durchlaufen, die einem bestimmten Muster entsprechen. Redis unterstützt im SCAN-Befehl das Abgleichen von Glob-Stilmustern.

Der SCAN-Befehl stellt einen Cursor-basierten Iterator über dem Redis-Schlüsselbereich bereit. Die iterative Aufrufsequenz für SCAN beginnt mit dem Aufruf des Benutzers, wobei das Cursorargument auf 0 gesetzt ist. Das Ergebnis dieses Aufrufs ist ein Stapel von Elementen und ein aktualisierter Cursor, der dem nächsten Aufruf von SCAN zugeführt wird. Diese Iteration wird fortgesetzt, bis Redis einen 0-Cursor zurückgibt.

Die folgende Python-Funktion veranschaulicht die grundlegende Verwendung von 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

Der SCAN-Befehl ist die empfohlene Methode zum Suchen nach Schlüsseln in der Datenbank und wird über den Befehl KEYS * empfohlen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow