python/mq Redis

來源:互聯網
上載者:User

標籤:rename   它的   特性   基於   sadd   *args   建立串連   sre   imp   

簡介

Redis是一個快取資料庫,但它的用處不僅僅是資料庫,更多的是用來作為訊息佇列和緩衝來使用。

和RabbitMQ一樣,也是基於socket通訊的,所以要注意資料的格式是byte。

基本

在Python中使用Redis其實很簡單,用redis模組即可,使用串連池的方法可以降低頻繁建立串連的開銷。

import redispool = redis.ConnectionPool(host=‘localhost‘, port=6479)cache = redis.Redis(connection_pool=pool)
操作常用命令
delete(*names) # 刪除任意資料類型exists(name) # 檢測是否存在keys(patter=‘*‘) # 根據正則匹配nameexpire(name, time)rename(src, dst)move(name, db) # 將name移到指定dbtype(name)scan(cursor, match=None, count=None)
String

就是key-value對的操作。

# ex到期時間秒,px到期時間毫秒,nx為True只有name不存在才執行,xxTrue只有name存在才執行set(name, value, ex, px, nx, xx)mset(key, value, key, value...)getset(key, value) # 擷取原來的並設定為新的valuegetrange(key, start, end) # 對value切片setbit(key, offset, value) # 對二進位的offset位修改為value值(0/1)bitcount(key) # 計算二進位位1的個數getbit(key, offset) # 擷取指定offset位的value狀態append(key, value) # 在前value處追加value
Hash

相當於嵌套的字典,key-{key-value}。

# 一個name中可存200多億個keyhset(name, key, value) # name是hash的key,key和value相當於hash的值hgetall(name) # 擷取所有key-valuehget(name, key) # 擷取指定valuehkeys(name) # 擷取所有keyhvals(name) # 擷取所有valuehmset(name, {k1:v1, k2:v2}) # 設定多個hlen(name) # 擷取key個數hdel(name, *key) # 刪除keyhscan(name, cursor, match=None, count=None) # 從cursor指定的下標開始,匹配match正則,返回列表hscan_iter(name, match=None, count=None) # 返回迭代器
List

就是列表,通過下標取值。

騷操作就是如rpoplpush和blpop這種操作。

lpush(name, values) # 從命名列表左側存入多個值,LIFOrpush(name, values) # 從命名列表右側存入多個值,FIFOlrange(names, start, end) # 取所有就是0,-1,l代表列表不是左llen(name) # 擷取列表長度linsert(name, BEFORE|AFTER, pivot, value) # 在值pivot前後插入新值lset(name, index, value) # 將指定下標的值修改為新值lrem(name, count, value) # 刪除指定的值,coutn為0刪除所有,正負數代表前後n個lpop(name) # 彈出第一個元素lindex(name, index) # 擷取指定index值ltrim(name, start, end) # 移除指定範圍外的所有元素rpoplpush(n1, n2)blpop(name, timeout=0) # 0為無限,從name列表左邊取值,無值時阻塞指定延遲時間brpop(name, timeout=0)
Set

相當於集合,交並差集,資料過濾。

sadd(name, values) # 集合添加值scard(name) # 擷取個數sdiff(name, *names) # 差集,去除共有valuessdiffstore(store, name, *names) # 存入storesmembers(name) # 擷取所有sinter(name1, name2) # 求交集sismember(name, value) # 檢測是否存在smove(name1, name2, value) # 從name1將value移動到name2spop(name) # 尾部彈出srandmembers(name, numbers) # 隨機擷取指定個數的valuesrem(name, values) # 刪除多個valuesunion(name, values) # 並集sscan(name, cursor, match=None, count=None)
SortSet

有序集合,可以按權重分數來排序元素,同時也具備集合的過濾特性。

zadd(name, *args, **kwargs) # *args為權重-value,**kwargs為value=權重zrange(name, start, end, withscores=False) # 擷取指定zcount(name, min, max) # 擷取分數在範圍內的個數zrank(name, value) # 擷取指定value的排名,從0開始zremrangebyrank(name, min, max)zscore(name, value) # 擷取分數zscan(name, cursor, match=None, count=None)
Pipe

管道操作,具有一定的事務能力。

pipe = r.pipline(transaction=True)pipe.set(‘name‘, ‘tom‘)time.sleep(30)pipe.set(‘role‘, ‘engineer‘)pipe.execute()
發布與訂閱模式

既然是用來傳遞訊息,那麼就會有發布與訂閱模式,而且相比RabbitMQ,Redis的發布與訂閱模式更簡單。

# 先瞭解Redis關於發布與訂閱模式的幾條命令r.publish(channel, message) # 發布訊息到指定頻道pub = r.pubsub() # 建立訂閱對象,通過該對象可訂閱頻道pub.subscribe(*args, **kwargs) # 訂閱一個或多個頻道pub.psubscribe(*args, **kwargs) # 訂閱模式頻道,關鍵詞參數:channel=patternpub.unsubscribe(*args) # 取消訂閱,參數為空白表示取消所有pub.punsubscribe(*args) # 取消模式訂閱

樣本:

# 發行者r.publish(channel, message)# 訂閱者pub = r.pubsub() # 建立訂閱者pub.subscribe(channel) # 訂閱頻道while True:    for item in pub.listen(): # 迴圈監聽頻道訊息        print(item[‘channel‘], item[‘message‘])

python/mq Redis

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.