2017-04-07 64 views
2

我試圖在Redis中存儲自定義的,可序列化的python對象,但遇到了一些奇怪的行爲。 set方法似乎起作用,但get方法僅返回對象的__repr__方法的值。例如...在Redis中存儲自定義Python對象

import redis 

# initialize the redis connection pool 
rs = redis.Redis(host='localhost', port=6379) 

# define a custom class 
class SomeCustomObject(object): 
    pass 

當我嘗試設置SomeCustomObject作爲一種價值,它似乎工作:

>>> rs.set('c', SomeCustomObject()) 
True 

然而,當我get值回,它只是__repr__字符串:

>>> rs.get('c') 
'<__main__.SomeCustomObject object at 0x102496710>' 

如何存儲/取回實例?我沒有太多的運氣在the documentation找到這方面的任何信息,但我肯定不是第一個遇到這個問題的人?

+0

你在哪裏序列化對象? –

回答

4

使用味酸

使用鹹菜模塊,您可以序列化和反序列化Python對象,並將其傳遞給Redis的。

從這這樣回答 - https://stackoverflow.com/a/20400288/4403600,它應該是這樣的:

import pickle 
import redis 

# define a custom class 
class SomeCustomObject(object): 
    pass 

# initialize the redis connection pool 
rs = redis.Redis(host='localhost', port=6379) 

# pickle and set in redis 
rs.set('c', pickle.dumps(SomeCustomObject())) 

# get from redis and unpickle 
unpacked_object = pickle.loads(rs.get('c')) 

延伸閱讀 - https://docs.python.org/2/library/pickle.html

+0

啊,這太好了。我是(無論出於什麼誤導的原因)在印象之下redis-py會處理酸洗,只要我有'__getstate__','__setstate__'部分處理。謝謝! – Tgsmith61591

相關問題