python - lpush - redis hkeys
obtener objeto de redis sin eval? (2)
La diferencia es que si bien memcached y redis solo admiten valores de cadena, pylibmc
serializa los valores que usted envía utilizando pickle
, redis-py
simplemente los convierte en cadena.
Si desea hacer lo mismo con redis, puede tener sus propias funciones para hacer el decapado por usted.
def set_value(redis, key, value):
redis.set(key, pickle.dumps(value))
def get_value(redis, key):
pickled_value = redis.get(key)
if pickled_value is None:
return None
return pickle.loads(pickled_value)
Para obtener una clave de Memcache (usando pylibmc), haz esto:
client.set(key, {''object'': ''dictionary''}, time=expire)
client.get(key)
Lo mismo en redis es esto:
redis.setex(key, expire, {''object'': ''dictionary''})
eval(redis.get(key) or ''None'')
Esa última línea no me parece bien. redis solo parece devolver cadenas. ¿Hay un get redis para devolver el objeto en la misma forma en que fue colocado?
O incluso puedes subclase Redis :
import pickle
from redis import StrictRedis
class PickledRedis(StrictRedis):
def get(self, name):
pickled_value = super(PickledRedis, self).get(name)
if pickled_value is None:
return None
return pickle.loads(pickled_value)
def set(self, name, value, ex=None, px=None, nx=False, xx=False):
return super(PickledRedis, self).set(name, pickle.dumps(value), ex, px, nx, xx)
Cortesía: https://github.com/andymccurdy/redis-py/issues/186