我正在尝试在Redis中存储一个自定义的,可序列化的python对象,但遇到了一些奇怪的行为。 set
方法似乎起作用,但get
方法仅返回对象的__repr__
方法的值。例如......
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 :(得分:7)
使用Pickle
使用pickle模块,您可以序列化和反序列化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'))