복붙노트

[REDIS] 평가없이 레디 스에서 개체를 얻을?

REDIS

평가없이 레디 스에서 개체를 얻을?

memcache에 (사용 pylibmc)에서 키를 얻으려면, 당신은이 작업을 수행 :

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

레디 스에서 동일은 이것이다 :

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

그 마지막 줄 바로 나에게 보이지 않는다. 레디 스에만 문자열을 반환 것으로 보인다. 는 GET가 거기에 그것이에 넣어 한 것과 같은 형태로 개체를 반환 레디 스?

해결법

  1. ==============================

    1.차이점은, 모두 memcached를 만 지원 문자열 값을 레디 스하면서, pylibmc 당신이 피클을 사용하여 전송 값을 직렬화하는 것이 단지 문자열로 변환 - 평은 레디 스.

    차이점은, 모두 memcached를 만 지원 문자열 값을 레디 스하면서, pylibmc 당신이 피클을 사용하여 전송 값을 직렬화하는 것이 단지 문자열로 변환 - 평은 레디 스.

    당신은 레디 스와 동일한 작업을 수행하려는 경우, 당신은 당신을 위해 산 세척을 할 자신의 기능을 가질 수 있습니다.

    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)
    
  2. ==============================

    2.아니면 당신도 레디 스를 서브 클래 싱 할 수 있습니다 :

    아니면 당신도 레디 스를 서브 클래 싱 할 수 있습니다 :

    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

  3. from https://stackoverflow.com/questions/12870772/get-object-from-redis-without-eval by cc-by-sa and MIT license