得到Redis的对象,而EVAL?(get object from redis without ev

2019-08-01 10:56发布

为了充分利用内存缓存(使用pylibmc)的关键,你这样做:

client.set(key, {'object': 'dictionary'}, time=expire)
client.get(key)

在Redis的同样是这样的:

redis.setex(key, expire, {'object': 'dictionary'})
eval(redis.get(key) or 'None')

最后一行不看我的权利。 Redis的似乎只返回字符串。 是否有一个get Redis的以相同的形式,它放于返回对象?

Answer 1:

所不同的是,虽然双方Memcached和Redis的只支持字符串值, pylibmc序列化值,您使用发送pickleredis-py只是将它们转换为字符串。

如果你想要做同样的redis的,你可以有自己的功能做酸洗你。

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)


Answer 2:

或者你甚至可以继承的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)

礼貌: https://github.com/andymccurdy/redis-py/issues/186



文章来源: get object from redis without eval?
标签: python redis