# I have the dictionary my_dict
my_dict = {
'var1' : 5
'var2' : 9
}
r = redis.StrictRedis()
Wie würde ich my_dict speichern und mit redis abrufen? Der folgende Code funktioniert beispielsweise nicht.
#Code that doesn't work
r.set('this_dict', my_dict) # to store my_dict in this_dict
r.get('this_dict') # to retrieve my_dict
json.dumps()
Schreiben als Zeichenfolge und nachdem Sie vom Redis-Benutzer abgerufen wurden,json.loads()
um sie wieder in die Python-Datenstruktur zu deserialisierenjson.dumps()
undjson.loads()
funktioniert nur, wenn Ihre Wörterbuchschlüssel immer Zeichenfolgen sind. Wenn Sie nicht sind, können Sie Gurke verwenden.hmset
dies nicht angegeben, es wird jedoch ein DataError ausgelöst, wenn Sie versuchen, ein leeres Diktat zu speichern.Sie können Ihr Diktat auswählen und als Zeichenfolge speichern.
quelle
pickle.loads
wird nur verwendet werden soll , auf 100% Daten vertrautEin anderer Weg: Sie können die
RedisWorks
Bibliothek verwenden.pip install redisworks
Es konvertiert Python-Typen in Redis-Typen und umgekehrt.
Haftungsausschluss: Ich habe die Bibliothek geschrieben. Hier ist der Code: https://github.com/seperman/redisworks
quelle
hmset
unter der Haube verwendet, wenn Sie eine Variable auf ein Diktat setzen. Wenn Sie dies tun, erhaltenroot.something = {}
Sie einen DataError, dahmset
keine leeren Wörterbücher zulässig sind . Ich erwähne dies, weil die Dokumentation für redis Ihnen dies nicht sagt.hmset
. Ich werde das untersuchen. @hlongmoreWenn Sie ein Python-Diktat in Redis speichern möchten, ist es besser, es als JSON-Zeichenfolge zu speichern.
Beim Abrufen wird die Serialisierung mit json.loads durchgeführt
Was ist mit Typen (z. B. Bytes), die nicht von JSON-Funktionen serialisiert werden?
Sie können Encoder- / Decoderfunktionen für Typen schreiben, die von json-Funktionen nicht serialisiert werden können. z.B. Schreiben der Base64 / ASCII-Encoder / Decoder-Funktion für das Byte-Array.
quelle
Da die grundlegende Antwort bereits von anderen Personen gegeben wurde, möchte ich einige hinzufügen.
Im Folgenden finden Sie die Befehle
REDIS
zum Ausführen grundlegender Operationen mitHashMap/Dictionary/Mapping
Typwerten.Im Folgenden sind ihre jeweiligen Methoden in der
redis-py
Bibliothek aufgeführt: -Alle oben genannten Setter-Methoden erstellen das Mapping, falls es nicht vorhanden ist. Alle oben genannten Getter-Methoden lösen keine Fehler / Ausnahmen aus, wenn Mapping / Key in Mapping nicht vorhanden ist.
Ich hoffe, es macht die Dinge klarer.
quelle
Ein anderer Weg, wie Sie sich der Sache nähern können:
Ich habe es nicht auf Effizienz / Geschwindigkeit getestet.
quelle
Der Befehl redis SET speichert eine Zeichenfolge und keine beliebigen Daten. Sie können versuchen, den Befehl redis HSET zu verwenden, um das Diktat als Redis-Hash mit so etwas wie zu speichern
Die Redis-Datentypen und Python-Datentypen stimmen jedoch nicht ganz überein. Python-Dicts können beliebig verschachtelt werden, aber für einen Redis-Hash muss Ihr Wert eine Zeichenfolge sein. Ein anderer Ansatz, den Sie wählen können, besteht darin, Ihre Python-Daten in Zeichenfolgen zu konvertieren und diese in Redis zu speichern
Wenn Sie die Zeichenfolge herausholen, müssen Sie sie analysieren, um das Python-Objekt neu zu erstellen.
quelle
Man könnte in Betracht ziehen, MessagePack zu verwenden, das von redis unterstützt wird.
Mit msgpack-python und aioredis
quelle
HMSET ist veraltet. Sie können HSET jetzt wie folgt mit einem Wörterbuch verwenden:
quelle
Versuchen Sie es mit rejson-py, das seit 2017 relativ neu ist. Schauen Sie sich diese Einführung an .
quelle
Wenn Sie nicht genau wissen, wie Sie Daten in Redis organisieren, habe ich einige Leistungstests durchgeführt, einschließlich der Analyse der Ergebnisse. Das von mir verwendete Diktat ( d ) hatte 437.084 Schlüssel (md5-Format) und die Werte dieser Form:
Erster Test (Einfügen von Daten in eine Redis-Schlüsselwertzuordnung):
Zweiter Test (Einfügen von Daten direkt in Redis-Schlüssel):
Wie Sie sehen können, müssen im zweiten Test nur 'info'-Werte analysiert werden, da der hgetall (Schlüssel) bereits ein Diktat zurückgibt, jedoch kein verschachteltes.
Und natürlich ist der erste Test das beste Beispiel für die Verwendung von Redis als Python-Diktat
quelle