Ooredis4. REDIS
以函数为单位:
Keys: DEL, KEYS, TTL...
Strings: SET, GET, GETSET...
Hashs: HSET, HDEL, HGET...
Lists: LPUSH, RPUSH, LPOP, RPOP...
Set: SADD, SREM, SPOP...
Sorted Sets: ZADD, ZREM...
...
5. REDIS-PY
以客户端对象为单位:
>>> from redis import Redis
>>> r = Redis()
>>> r.lpush('numbers', 'one')
1L
>>> dir(r)
>>> [..., 'append', 'bgrewriteaof', 'bgsave', 'blpop',
'brpop', 'brpoplpush', 'config_get', 'config_set',
'connection_pool', 'dbsize', 'decr', ...]
7. REDIS函数->OOREDIS类
redis: Key(ttl, expire, del, ...)
/ / |
Hash List SortedSet Set String
| | | | |
HGET LPUSH ZADD SADD SET
HSET RPUSH ZRANK SUNION GET
HLEN LRANGE ZREM SPOP SETNX
... ... ... ... ...
| | | | |
ooreids: Dict List SortedSet Set SingleValue,
Counter
9. OOREDIS
例子:
>>> greet = SingleValue('greeting')
>>> greet.set('hello world')
>>> greet.get()
u'hello world'
10. OOREDIS
例子2:
>>> project = Dict('ooredis-project')
>>> project['name'] = 'ooredis'
>>> project['language'] = 'Python'
>>> project['author'] = 'huangz'
12. Key
所有Key对象的基类,子类通过继承它以获得以下通用命
令:
__init__(self,
name,
client=None,
type_case=None)
name, delete, exists, expire, expireat,
persist, ttl, sort
13. Key
例子:
>>> books = List('my_book_list')
>>> dir(books)
['__abstractmethods__', ..., 'exists', 'expire', 'expireat',
'index', 'lpop', 'lpush', 'name', 'persist', ..., 'ttl']
>>>
>>> from ooredis.mix.key import Key
>>> issubclass(List, Key)
True
15. SingleValue
例子:
>>> phone = SingleValue('china_mobile')
>>> phone.set(10086)
>>> phone.get()
10086
>>> phone.getset(123123)
10086
>>> phone.get()
123123
17. Counter
例子:
>>> counter = Counter('hit_count')
>>> counter.incr()
1
>>> counter.incr(5)
6
>>> counter += 10086
>>> counter.get()
10092
>>> counter.decr()
10091
18. Dict
字典对象,提供O(1)复杂度的读/写操作:
__setitem__, __getitem__, __delitem__,
__iter__, __contains__, __len__
incr(), decr()
setdefault(), get()
items(), keys(), values()
iteritems(), iterkeys(), itervalues(),
pop(), popitems(), clear(), update()
19. Dict
例子:
>>> project = Dict('ooredis-project')
>>> project['name'] = 'ooredis'
>>> project['version'] = 1.0
>>> project['language'] = 'Python'
>>>
>>> project.items()
[('name', u'ooredis'), ('version', 1.0),
('language', u'Python')]
>>> 'author' in project
False
20. List
列表对象,提供slice,以及双向的push/pop等操作:
__contains__, __getitem__, __delitem__,
__setitem__, __iter__, __len__
lpush, lpop, blpop,
rpush, rpop, brpop,
rpoplpush, brpoplpush
remove, count, index
21. List
例子:
>>> books = List('my_book_list')
>>> books.rpush('on lisp')
>>> books.rpush('pro python')
>>> books.lpush('design patterns')
>>>
>>> [book.title() for book in books]
[u'Design Patterns', u'On Lisp', u'Pro Python']
>>> books.lpop()
u'design patterns'
22. Set
集合对象,支持Key对象之间或Key对象和Python集合之间的
对象运算:
isdisjoint, __le__, __lt__, __ge__, __gt__
__or__, __ror__, __and__, __rand__,
__sub__, __rsub__, __xor__, __rxor__
__len__, __iter__, __contains__
add, remove, pop, random, move
23. Set
例子:
>>> jack = Set('jack_following')
>>> jack.add('tom'); jack.add('peter')
>>>
>>> # Set object & Set object
>>> jack & jack
set([u'peter', u'tom'])
>>>
>>> # Set object | Python set
>>> jack | {'tom', 'marry'}
set(['marry', u'peter', u'tom'])
25. SortedSet
例子:
>>> fruit = SortedSet('fruit_price')
>>> fruit['apple'] = 8.3
>>> fruit['banana'] = 7.5
>>> fruit['orange'] = 5
>>>
>>> fruit[0]
{'score': 5.0, 'value': u'orange'}
>>> list(reversed(fruit))[:2]
[{'score': 8.3, 'value': u'apple'}, {'score': 7.5, 'value':
u'banana'}]
28. REDIS-PY
每次都手动转型太不低碳了:
>>> from redis import Redis
>>> r = Redis()
>>> r.set('PI', 3.1415926)
True
>>> r.get('PI')
'3.1415926'
>>> float(r.get('PI'))
3.1415926
32. IntTypeCase
>>> from ooredis.type_case import IntTypeCase
>>>
>>> nums = Set('nums', type_case=IntTypeCase)
>>> nums.add(10086)
>>> nums.add('2011')
>>> nums
Set Key 'nums': set([2011, 10086])
>>>
>>> nums.add('hello')
ValueError: invalid literal for int() with base 10: 'hello'
33. FloatTypeCase
>>> from ooredis.type_case import FloatTypeCase
>>>
>>> const = Dict('const',
type_case=FloatTypeCase)
>>>
>>> const['pi'] = 3.1415926
>>> const['e'] = 2.71828
>>> const
Dict Key 'const': {'pi': 3.1415926, 'e': 2.71828}
34. StringTypeCase
>>> from ooredis.type_case import
StringTypeCase
>>> friends = Set('my_friend',
type_case=StringTypeCase)
>>> friends.add('jack')
>>> friends.add('marry')
>>> friends.add(unicode('harry'))
>>> friends
Set Key 'my_friend': set([u'marry', u'jack', u'harry'])
35. JsonTypeCase
>>> from ooredis.type_case import JsonTypeCase
>>> site = SingleValue('site',
type_case=JsonTypeCase)
>>> google = {'name': 'google',
'type': 'search engine',
'url': 'www.google.com'}
>>> site.set(google)
>>> site.get()
{u'url': u'www.google.com', u'type': u'search engine',
u'name': u'google'}
36. SerializeTypeCase
>>> from ooredis.type_case import
SerializeTypeCase
>>> obj = SingleValue('book',
type_case=SerializeTypeCase)
>>> class Book:
... name = 'Learning Android',
...
>>> obj.set(Book())
>>> book = obj.get()
>>> book.name
'Learning Android'
38. FloatTypeCase示例
class FloatTypeCase:
""" 将python值转换为float类型。 """
@staticmethod
def to_redis(value):
return float(value)
@staticmethod
def to_python(value):
if value == None: # 某些方法会返回None
return None
return float(value)
41. 下载OOREDIS
$ cd /tmp/
$ git clone git://github.com/huangz1990/ooredis.git
Cloning into ooredis...
...
Resolving deltas: 100% (34/34), done.
$ cd ooredis/
$ sudo mv ooredis/ /usr/lib/python2.7/site-packages/
$ python2
Python 2.7.2 (default, Jun 29 2011, 11:17:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ooredis import *
42. 使用OOREDIS
>>> from ooredis import *
>>> dir()
['Counter', 'Dict', 'List', 'Set', 'SingleValue', 'SortedSet',
'__builtins__', '__doc__', '__name__', '__package__',
'connect', 'get_client', 'type_case']
>>>
>>> connect(db=5) # 指定数据库
<redis.client.Redis object at 0xb73db1cc>
>>> ...