在Redis

时间:2017-04-07 16:56:51

标签: python redis

我正在尝试在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找到任何相关信息都没有太多运气,但我肯定不是第一个遇到这个问题的人吗?

1 个答案:

答案 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'))

进一步阅读 - https://docs.python.org/2/library/pickle.html