具有redis-py的复杂对象

时间:2014-03-09 22:44:18

标签: python redis redis-py

我一直在使用redis-cli来了解redis的工作方式。我知道使用这个工具我可以这样做:

127.0.0.1:6379> set post:1:title "Redis is cool!"
OK
127.0.0.1:6379> set post:1:author "haye321"
OK
127.0.0.1:6379> get post:1:title
"Redis is cool!"

我似乎无法弄清楚我是如何使用redis-py实现这一目标的。似乎所提供的set命令不允许对象类型或id。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您正在逐个设置Redis哈希的单个字段(哈希是Redis中用于存储对象的公共数据结构)。

更好的方法是使用Redis HMSET命令,该命令允许在一次操作中设置给定哈希的多个字段。使用Redis-py它将如下所示:

import redis
redisdb = redis.Redis(host="localhost",db=1)
redisdb.hmset('post:1', {'title':'Redis is cool!', 'author':'haye321'})

<强>更新

当然,您可以使用HSET命令逐个设置Hash字段成员,但效率较低,因为每个字段需要一个请求:

import redis
redisdb = redis.Redis(host="localhost",db=1)
redisdb.hset('post:1', 'title', 'Redis is cool!')
redisdb.hset('post:1', 'author', 'haye321'})

答案 1 :(得分:1)

另一种方式:您可以使用RedisWorks库。

pip install redisworks

>>> from redisworks import Root
>>> root = Root()
>>> root.item1 = {'title':'Redis is cool!', 'author':'haye321'}
>>> print(root.item1)  # reads it from Redis
{'title':'Redis is cool!', 'author':'haye321'}

如果您真的需要在Redis中使用post.1作为键名:

>>> class Post(Root):
...     pass
... 
>>> post=Post()
>>> post.i1 = {'title':'Redis is cool!', 'author':'haye321'}
>>> print(post.i1)
{'author': 'haye321', 'title': 'Redis is cool!'}
>>> 

如果您查看Redis

$ redis-cli
127.0.0.1:6379> type post.1
hash