Python Redis數據結構服務器

首先下載redis:

pip install redis
在開始使用redis時會出現以下的問題:


原因是redis沒有啓動,解決方法是安裝了redis-tool,運行redis-cli

如果此時發生如下錯誤:


你要安裝redis-server:

sudo apt-get install redis-server
再次運行redis-cli時出現如下的效果即爲正常啓動:


接下來進行字符串的一些操作:set、get、getset、getrange、setrange、mset、delete、incr、incrbyfloat、decr

>>> import redis
>>> conn = redis.Redis()
>>> conn.keys('*')
[]
>>> conn.set('secret','ni!')
True
>>> conn.set('carats',24)
True
>>> conn.set('fever','101.5')
True
>>> conn.get('secret')
'ni!'
>>> conn.incr('carats')
25
>>> conn.getset('secret','icky-icky-icky-ptang-zoop-boing!')
'ni!'
>>> conn.getrange('secret',-6,-1)
'boing!'
>>> conn.setrange('secret',0,'ICKY')
32
>>> conn.get('secret')
'ICKY-icky-icky-ptang-zoop-boing!'
>>> conn.delete('fever')
1
>>> conn.set('fever','101.5')
True
>>> conn.incrbyfloat('fever')
102.5


列表操作:

>>> conn.lpush('zoo','bear')
1L
>>> conn.lpush('zoo','alligator','duck')
3L
>>> conn.linsert('zoo','before','bear','beaver')
4
>>> conn.linsert('zoo','after','bear','cassowary')
5
>>> conn.lset('zoo',2,'marmoset')
True
>>> conn.rpush('zoo','yak')
6L
>>> conn.lindex('zoo',3)
'bear'
>>> conn.lrange('zoo',0,2)
['duck', 'alligator', 'marmoset']
>>> conn.ltrim('zoo',1,4)
True
>>> conn.lrange('zoo',0,-1)
['alligator', 'marmoset', 'bear', 'cassowary']

哈希表操作:創建一個Redis的哈希表song,並對它進行操作

>>> conn.hmset('song',{'do':'a deer','re':'about a deer'})
True
>>> conn.hset('song','mi','a note to follow re')
1L
>>> conn.hget('song','mi')
'a note to follow re'
>>> conn.hmget('song','re','do')
['about a deer', 'a deer']
>>> conn.hkeys('song')
['do', 're', 'mi']
>>> conn.hvals('song')
['a deer', 'about a deer', 'a note to follow re']
>>> conn.hlen('song')
3
>>> conn.hgetall('song')
{'do': 'a deer', 'mi': 'a note to follow re', 're': 'about a deer'}
>>> conn.hsetnx('song','fa','a note that rhymes wirh la')
1L


集合操作:

如果重新用conn.sadd('zoo','duck','goat','turkey'),會出現衝突問題


>>> conn.sadd('boo','duck','goat','turkey')
3
>>> conn.scard('boo')
3
>>> conn.smembers('boo')
set(['turkey', 'goat', 'duck'])
>>> conn.srem('boo','turkey')
1
>>> conn.sadd('better_boo','tiger','wolf','duck')
3
>>> conn.sinter('boo','better_boo')
set(['duck'])
>>> conn.sinterstore('fowl_boo','boo','better_boo')
1
>>> conn.sunion('boo','better_boo')
set(['tiger', 'wolf', 'goat', 'duck'])
>>> conn.sunionstore('fabulous_boo','boo','better_boo')
4
>>> conn.sdiff('boo','better_boo')
set(['goat'])


有序集合:   以時間序列爲例子,利用時間戳跟蹤用戶的登錄。這裏時間用unix的epoch值

>>> import time
>>> now=time.time()
>>> now
1454420094.849293
>>> conn.zadd('logins','smeagol',now)
1
>>> conn.zadd('logins','sauron',now+(5*60))
1
>>> conn.zadd('logins','bilbo',now+(2*60*60))
1
>>> conn.zadd('logins','treebeard',now+(24*60*60))
1
>>> conn.zrank('logins','bilbo')
2
>>> conn.zscore('logins','bilbo')
1454427294.849293
>>> conn.zrange('logins',0,-1)
['smeagol', 'sauron', 'bilbo', 'treebeard']
>>> conn.zrange('logins',0,-1,withscores=True)
[('smeagol', 1454420094.849293), ('sauron', 1454420394.849293), ('bilbo', 1454427294.849293), ('treebeard', 1454506494.849293)]


位圖:省空間且快速的處理超大集合數字的方式

>>> days=['2016-01-31','2016-02-01','2016-02-02']
>>> big_spender=1089
>>> tire_kicker=40459
>>> late_joiner=550212
>>> conn.setbit(days[0],big_spender,1)
0
>>> conn.setbit(days[0],tire_kicker,1)
0
>>> conn.setbit(days[1],big_spender,1)
0
>>> conn.setbit(days[2],big_spender,1)
0
>>> conn.setbit(days[2],late_joiner,1)
0
>>> for day in days
  File "<stdin>", line 1
    for day in days
                  ^
SyntaxError: invalid syntax
>>> for day in days:
... conn.bitcount(day)
  File "<stdin>", line 2
    conn.bitcount(day)
       ^
IndentationError: expected an indented block
>>> for day in days:
...     conn.bitcount(day)
... 
2
1
2
>>> conn.getbit(days[1],tire_kicker)
0
>>> conn.bitop('and','everyday',*days)
68777L
>>> conn.bitcount('everyday')
1
>>> conn.getbit('everyday',big_spender)
1
>>> conn.bitop('or','everyday',*days)
68777L
>>> conn.bitcount('alldays')
0
>>> conn.bitop('or','alldays',*days)
68777L
>>> conn.bitcount('alldays')
3

緩存和過期:expire()函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章