Python преобразовать объект Redis в исходный тип данных

1

Я использую redis-py и всякий раз, когда я храню список или dict в кеше, запуск функции get возвращает строку. как мне вернуть исходный тип данных?

cache = redis.StrictRedis(host='localhost', port=6379, decode_responses=True)
cache.set("posts",[["bob","My first post"],["mary","My second post"]])

cache.get("post")
>>>"[["bob","My first post"],["mary","My second post"]]"

Это что-то, что мне нужно сделать вручную?

Теги:
redis

2 ответа

3

Список списков - это ваша проблема, так как Redis не любит вложенные структуры.

Попробуйте что-то вроде преобразования в json перед сохранением и конвертированием обратно на доступ.

Ваша проблема очень похожа на то, как хранить сложный объект в redis (используя redis-py)

В 3-м ответе (из CivFan) приведен пример, который будет транслировать довольно напрямую для того, что, по-видимому, вы пытаетесь сделать. Для справки, фрагмент кода, предоставленный в этом вопросе/ответе:

import json
import redis

r = redis.StrictRedis(host='localhost', port=6379, db=0)

images= [
    {'type':'big', 'url':'....'},
    {'type':'big', 'url':'....'},
    {'type':'big', 'url':'....'},
]

json_images = json.dumps(images)
r.set('images', json_images)
unpacked_images = json.loads(r.get('images'))
images == unpacked_images

Есть еще несколько моментов, которые следует учитывать и в связанном вопросе.

0

Если вы храните стандартные json-данные, вы должны использовать модуль json для сериализации перед тем, как вводить redis.

import json

val = json.dumps([["bob","My first post"],["mary","My second post"]])
redis_cache.set("posts",val)
str_val = redis_cache.get("posts")
obj = json.loads(str_val)

Если вы хотите сохранить любой объект python, используйте pickle для сериализации

import pickle

val = pickle.dumps([["bob","My first post"],["mary","My second post"]])
redis_cache.set("posts",val)
str_val = redis_cache.get("posts")
obj = pickle.loads(str_val)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню