Jak przechowywać i pobierać słownik za pomocą redis
# I have the dictionary my_dict
my_dict = {
'var1' : 5
'var2' : 9
}
r = redis.StrictRedis()
Jak będę przechowywać my_dict i odzyskać go za pomocą redis. Na przykład poniższy kod nie działa.
#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
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
11 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Konwertuje typ Pythona na typ Redis i na odwrót.
Zastrzeżenie: napisałem bibliotekę. Oto kod:
https://github.com/seperman/redisworks
https://github.com/seperman/redisworks
Anonimowy użytkownik
Potwierdzenie od:
Podczas pobierania usuń serializację za pomocą json.loads
Wolę SET/GET zamiast HMSET/HGETALL, ponieważ złożoność czasowa ostatniej operacji wynosi O (N).
A co z typami (np. Bajty), które nie są serializowane przez funkcje json?
Można pisać funkcje kodera/dekodera dla typów, których nie można serializować za pomocą funkcji JSON. np. napisz funkcję kodera/dekodera base64/ascii dla tablicy bajtów.
Anonimowy użytkownik
Potwierdzenie od:
Poniżej znajdują się polecenia w służące do wykonywania podstawowych operacji na wartościach, takich jak .
Oto ich metody w bibliotece : -
Wszystkie powyższe metody ustawiające tworzą mapowanie, jeśli nie istnieje.
Wszystkie powyższe metody pobierające nie zgłaszają błędów/wyjątków, jeśli mapowanie/klucz w mapowaniu nie istnieje.
Mam nadzieję, że to wszystko wyjaśnia.
Anonimowy użytkownik
Potwierdzenie od:
Nie testowałem tego pod kątem wydajności/szybkości.
Anonimowy użytkownik
Potwierdzenie od:
ale typy danych redis i python nie są dokładnie takie same. Python dyktuje mogą być dowolnie zagnieżdżone, ale redis będzie wymagał, aby twoja wartość była ciągiem. Innym podejściem, którego możesz użyć, jest przekonwertowanie danych Pythona na łańcuch i przechowywanie ich w redis, na przykład
a kiedy otrzymasz ciąg, będziesz musiał go przeanalizować, aby odtworzyć obiekt Pythona.
Anonimowy użytkownik
Potwierdzenie od:
,
https://msgpack.org/index.html
który jest zatwierdzony przez redis.
Za pomocą
msgpack-python
https://github.com/msgpack/msgpack-python
i
aioredis
https://github.com/aio-libs/aioredis
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
rejson-py
https://github.com/RedisLabs/rejson-py
który jest stosunkowo nowy od 2017 roku. Spójrz na to
wprowadzenie
https://redislabs.com/blog/redis-as-a-json-store/
.
Anonimowy użytkownik
Potwierdzenie od:
W słowniku, którego użyłem (
re
) to klucze 437.084 (format MD5) i wartości w tym formularzu:
Pierwszy test
(wstaw dane do mapowania klucz-wartość redis):
Drugi test
(wstawianie danych bezpośrednio do kluczy Redis):
Jak widać, w drugim teście trzeba przeanalizować tylko wartości „info”, ponieważ hgetall (klucz) już zwraca dict, ale nie zagnieżdżony.
I oczywiście najlepszym przykładem użycia Redisa jako dyktanda w Pythonie jest
pierwszy test