2017-04-07 85 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

相关问题