Package: redisworks
Redisworks 0.4.0The Pythonic Redis ClientWhy Redisworks?Lazy Redis QueriesDynamic TypingEase of useHave you ever used PyRedis and wondered why you have to think about
types all the time? That you have to constantly convert objects to
strings and back and forth since Redis keeps most things as strings?Redis works provides a Pythonic interface to Redis. Let Redisworks take
care of type conversions for you.Behind the scene, Redisworks usesDotObjectto provide
beautiful dot notation objects and lazy Redis queries.Installpip install redisworksNote that RedisWorks needs Redis server 2.4+.Setuplet’s say if you want all the keys in Redis to start with the wordroot. Then you:root=Root()# connects to Redis on local host by defaultOr if you want to be more specific:root=Root(host='localhost',port=6379,db=0)passwordAny other parameter that you pass to Root will be passed down to
PyRedis. For example:root=Root(host='localhost',port=6379,db=0,password='mypass')Saving to RedisSaving to Redis is as simple as assigning objects to attributes of root
or attributes of attributes of root (you can go as deep as you want.)
Make sure you are not using any Python’s reserved words in the key’s
name.Example:>>>fromredisworksimportRoot>>>importdatetime>>>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}}Redis works will automatically convert your object to the proper Redis
type and immediately write it to Redis as soon as you assign an element!The respective keys for the above items will be just like what you type:root.my.list,root.time,root.the.mapping.example:If you use redis-cli, you will notice that the data is saved in the
proper Redis data type: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
listReading from RedisReading the data is as simple as if it was just saved in Python memory!Redis works returns Lazy queries just like how Django returns lazy
queries. In fact the lazy objects code is borrowed from Django!If you ran the example fromSaving to Redis, run
a flushroot.flush()to empty Redisworks Cache. This is so it goes
and gets the objects from Redis instead of reading its own current copy
of data:>>>fromredisworksimportRoot>>>root=Root()>>>thetime=root.time>>>thelist=root.my.list>>>mydict=root.the.mapping.example>>>mydict# is not evalurated yet!<Lazyobject: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.time2016-08-2210:03:19Changing root key nameEvery key name by default starts with the wordroot. If you want to
use another name, you have two options:Option 1, pass a namespace:>>>mynamespace=Root(conn=redis_conn,namespace='mynamespace')>>>mynamespace.foo='bar'Option 2, simply subclassRoot:>>>fromredisworksimportRoot>>>classPost(Root):...pass>>>post=Post()>>>post.item1="something"# saves to Redis...>>>print(post.item1)# loads from RedissomethingNumbers as attribute namesLet’s say you wantroot.1as a key name. Python does not allow
attribute names start with numbers.All you need to do is start the number with the characteriso
Redisworks takes care of it for you:>>>root.i1=10>>>print(root.i1)10The actual key in Redis will beroot.1Dynamic key names>>>path1='blah'>>>path2='blah.here`'>>>root[path1]='foo'>>>root[path2]='foo bar'>>>root.blahfoo>>>root.blah.herefoobarPassing TTL to the keysYou can use thewith_ttlhelper.>>>fromredisworksimportRoot,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.mysetOther examplesTake a look atexample.pyPrimary AuthorSeperman (Sep Dehpour)GithubLinkedinZepWorks