主要作者
Seperman(Sep Dehpour)
Python风格的Redis客户端。
Python风格的Redis客户端
为什么选择Redisworks?
懒加载Redis查询
动态类型
易于使用
你是否曾经使用过PyRedis,并想知道为什么你总是需要考虑类型?你不得不不断地将对象转换为字符串然后再转换回来,因为Redis将大多数内容都作为字符串保存?
Redisworks为Redis提供了一个Python风格的接口。让Redisworks为你处理类型转换。
幕后,Redisworks使用DotObject来提供漂亮的点表示法对象和懒加载Redis查询。
pip install redisworks
注意RedisWorks需要Redis服务器2.4+。
假设你想要Redis中的所有键都以单词root开头。那么你
root = Root() # connects to Redis on local host by default
或者如果你想要更具体的话
root = Root(host='localhost', port=6379, db=0)
任何你传递给Root的其他参数都将传递给PyRedis。例如
root = Root(host='localhost', port=6379, db=0, password='mypass')
将对象保存到Redis就像将对象赋值给root的属性或root属性的属性一样简单(你可以深入到任何深度)。确保你不在键名中使用Python的保留字。
示例
>>> from redisworks import Root
>>> import datetime
>>> root = Root()
>>> root.my.list = [1, 3, 4]
>>> root.my.other.list = [1, [2, 2]]
>>>
>>> some_date = datetime.datetime(2016, 8, 22, 10, 3, 19)
>>> root.time = some_date
>>>
>>> root.the.mapping.example = {1:1, "a": {"b": 10}}
Redisworks将自动将你的对象转换为适当的Redis类型,并在你分配元素时立即将其写入Redis!
以上各项的键将类似于您输入的内容:root.my.list,root.time,root.the.mapping.example
如果您使用redis-cli,您会注意到数据是以适当的Redis数据类型保存的
127.0.0.1:6379> scan 0 1) "0" 2) 1) "root.the.mapping.example" 2) "root.time" 3) "root.my.list" 127.0.0.1:6379> type root.the.mapping.example hash 127.0.0.1:6379> type root.time string 127.0.0.1:6379> type root.my.list list
读取数据就像它刚刚保存在Python内存中一样简单!
Redis返回惰性查询,就像Django返回惰性查询一样。实际上,惰性对象代码是从Django借用的!
如果您从保存到Redis中的示例运行,请运行一个flush root.flush()来清空Redisworks缓存。这样做是为了让它从Redis获取对象,而不是读取自己的当前数据副本
>>> from redisworks import Root
>>> root = Root()
>>> thetime = root.time
>>> thelist = root.my.list
>>> mydict = root.the.mapping.example
>>> mydict # is not evalurated yet!
<Lazy object: root.the.mapping.example>
>>> print(mydict)
{1:1, "a": {"b": 10}} # Now all the 3 objects are read from Redis!
>>> mydict
{1:1, "a": {"b": 10}}
>>> root.my.list
[1, 3, 4]
>>> root.my.other.list
[1, [2, 2]]
>>> root.time
2016-08-22 10:03:19
默认情况下,每个键名都以单词root开头。如果您想使用另一个名称,您有两个选项
选项1:传递命名空间
>>> mynamespace = Root(conn=redis_conn, namespace='mynamespace')
>>> mynamespace.foo = 'bar'
选项2:简单地继承Root
>>> from redisworks import Root
>>> class Post(Root):
... pass
>>> post=Post()
>>> post.item1 = "something" # saves to Redis
...
>>> print(post.item1) # loads from Redis
something
假设您想要root.1作为键名。Python不允许属性名以数字开头。
您只需要将数字以字符i开头,Redisworks就会为您处理
>>> root.i1 = 10
>>> print(root.i1)
10
Redis中的实际键将是root.1
>>> path1 = 'blah'
>>> path2 = 'blah.here`'
>>> root[path1] = 'foo'
>>> root[path2] = 'foo bar'
>>> root.blah
foo
>>> root.blah.here
foo bar
您可以使用with_ttl辅助函数。
>>> from redisworks import Root, with_ttl
>>> self.root.myset = with_ttl([1, 2, 3], ttl=1)
>>> self.root.flush()
>>> self.root.myset
[1, 2, 3]
>>> time.sleep(1.2)
>>> self.root.flush()
>>> self.root.myset
请参阅example.py
下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f3f61ae47f91a194192ba815cd932ebc7c07129a386ca0b29081f6362e2cd088 |
|
MD5 | c1eb39a082426696085bdee284d0a8c8 |
|
BLAKE2b-256 | 39f44a2015c56135422cd4a82e1b766791e29113b96564089616e0ad3d5ba8ee |
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 43a54fce68c211d55c445cbc99805905256a34fb797ef444ac8876ef7960a772 |
|
MD5 | 5f45c7e52f68e2da7156946429b0e372 |
|
BLAKE2b-256 | 1ccb8c148e0ad87f54cdf3fc89e0e842fad8c47d3e438f6cdf2368b6acd10e61 |