Saltar al contenido

cómo almacenar un objeto complejo en redis (usando redis-py)

Solución:

En realidad, puede almacenar objetos de Python en redis utilizando el módulo incorporado pickle.

He aquí un ejemplo.

import pickle
import redis

r = redis.StrictRedis(host="localhost", port=6379, db=0)
obj = ExampleObject()
pickled_object = pickle.dumps(obj)
r.set('some_key', pickled_object)
unpacked_object = pickle.loads(r.get('some_key'))
obj == unpacked_object

Si sus datos se pueden serializar en JSON, entonces esa puede ser la mejor opción que guardar los pepinillos de Python en una base de datos externa, ya que es un estándar más común fuera de Python, es más legible por humanos por sí solo y evita un vector de ataque bastante grande. .

Ejemplo JSON:

import json
import redis

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

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

# Convert python dict to JSON str and save to Redis
json_images = json.dumps(images)
r.set('images', json_images)

# Read saved JSON str from Redis and unpack into python dict
unpacked_images = json.loads(r.get('images'))
images == unpacked_images

pitón 3:

unpacked_images = json.loads(r.get('images').decode('utf-8'))
images == unpacked_images

No puede crear estructuras anidadas en Redis, lo que significa que no puede (por ejemplo) almacenar una lista de redis nativa dentro de un mapa hash de redis nativo.

Si realmente necesita estructuras anidadas, es posible que desee almacenar un blob JSON (o algo similar) en su lugar. Otra opción es almacenar un “id” / clave para un objeto redis diferente como el valor de la clave del mapa, pero eso requiere múltiples llamadas al servidor para obtener el objeto completo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *