12

(pylibmcを使用して)memcacheからキーを取得するには、次のようにします。

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

redisでも同じです:

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

その最後の行は私には正しく見えません。redisは文字列のみを返すようです。オブジェクトを入れたのと同じ形式で返すgetredisはありますか?

4

2 に答える 2

27

違いは、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)
于 2012-10-13T07:57:08.030 に答える
10

または、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

于 2013-11-30T02:57:04.223 に答える