2012-10-13 32 views
10

爲了得到(使用pylibmc)從內存緩存鍵,你這樣做:從沒有評估的redis中獲取對象?

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

在Redis的同樣是這樣的:

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

最後一行不看我的權利。 redis只能返回字符串。是否有一個獲取redis以與放入的相同形式返回對象?

回答

24

不同之處在於,雖然memcached和redis都只支持字符串值,但pylibmc將使用pickle,redis-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) 
7

或者你甚至可以子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