Python使用redis的訊息佇列

2021-09-25 06:49:38 字數 2738 閱讀 7591

redis 服務

1、安裝

yum install redis

2、 python安裝支援模組

/opt/python2.7.13/bin/pip install redis

3、 和redis的簡單直接互動

in [1]: import redis

in [2]: rc = redis.redis(host='192.168.8.237',port=6379,decode_responses=true)

in [5]: rc.set('imoocc','jeson')

out[5]: true

in [7]: rc.get('imoocc')

out[7]: u'jeson'

redis簡單操作對於和redis的互動, redis的類中提供了連線池的方式,我們可以通過連線池管理並操作redis。

1、連線池建立,利用連線池連線

in [8]: connpool = redis.connectionpool(host='192.168.8.237',port=6379,decode_responses=true)

in [9]: rc = redis.redis(connection_pool=connpool)

in [10]: rc.set('imooccp','1234566')

out[10]: true

in [11]: rc.get('imooccp')

out[11]: u'1234566'

2、redis中db ,指定資料訪問的db

redis.conf中設定了db的數量,那麼redis的資料庫名也為0 到15,如下:

databases 16

指定使用那個資料庫名,我們通過如下的方式,就可以了:

in [29]: connpool = redis.connectionpool(host='192.168.8.237',port=6379,decode_responses=true,db=3)

in [30]: rc.set('test2','lllll')

out[30]: true

這樣就將資料庫寫入到db3了,如何驗證呢?我們從服務端來認證最直接,如下:

用redis-cli(redis自帶的工具)登入服務端,檢視寫入的key。

127.0.0.1:6379> select 3

ok127.0.0.1:6379[3]> keys * //檢視db 3這個庫下所有的key

1) "imooccc"

那麼 接下來介紹redis詳細專案使用的內容,大家不要覺得介紹的內容擴散太大。

最近在作乙個任務系統,任務寫入是不定時的,我們需要用乙個程式去定期消費這些任務,必須是有先後順序的,而且是前乙個任務確認執行完後,才會去執行下乙個。

怎麼辦呢?用佇列啊,對吧!用什麼佇列,怎麼用?

介紹下為什麼要用redis來作訊息處理:

簡單說,redis支援兩種消費模式,一種發布-訂閱模式,及乙個訊息會被多個消費者處理(簡單說類似是乙個廣播訊息,所有人都會接收)。很明顯我得系統中不需要這麼用,系統裡邊就需要佇列模式,及先到的任務優先處理。那麼對佇列用什麼型別得資料庫結構來作呢?

先得聊聊list

list 這個資料型別,在python裡是乙個列表,在redis裡就是乙個有序佇列(或者說資料鏈表)了。

型別圖示如下:

大家看了這個結構就可以清楚了,我們可以利用list的資料介面模式,設計從左端和右端都可以對list進元素的同向處理(滿足佇列的特性先到先出)。

1、從左端插入元素

in [10]: rc.lpush('tasklist',1,2,3)

out[10]: 3l

列印輸出內容,如下:

in [17]: print(rc.lrange('tasklist',0,2))

[u'3', u'2', u'1']

類似的從左測插入的方法還有lpushx(name,value),區別只有當name存在才將value插入到最左邊。

2、從右邊插入元素

in [21]: rc.rpush('tasklist','5')

out[21]: 5l

in [22]: print(rc.lrange('tasklist',0,4))

[u'4', u'3', u'2', u'1', u'5']

3、從左邊取出元素怎麼取呢?

in [23]: rc.lpop("tasklist")

out[23]: u'4'

in [24]: rc.lpop("tasklist")

out[24]: u'3'

in [25]: print(rc.lrange('tasklist',0,4))

[u'2', u'1', u'5']

我們會看到從左側已經取出了兩個元素了。剩下來[u'2', u'1', u'5']

4、從右側呢?

當然就是rc.rpop()了

python對於redis的基礎使用和redis作為佇列的簡單使用就介紹這些,

python的工程裡邊如何更好封裝redis庫的連線和方法,

Python中redis的使用

windows下python中redis的使用 預設使用的埠號是6379。此時的redis服務就啟動了。可以在python等其他環境中對如redis進行讀寫操作。另外,該目錄下有乙個redis cli.exe,是redis的客戶端,直接啟動這個可以進行redis中key和value的修改。用sele...

python使用redis問題

setex key seconds value 可用版本 2.0.0 時間複雜度 o 1 將鍵 key 的值設定為 value 並將鍵 key 的生存時間設定為 seconds 秒鐘。如果鍵 key 已經存在,那麼 setex 命令將覆蓋已有的值。setex 命令的效果和以下兩個命令的效果類似 se...

Redis的Stream型別,高效地實現訊息佇列

redis5.0中發布了stream型別,乍一看,是流資料型別,第一反應是流式資料型別,例如儲存二進位制內容。但是錯了,redis提供的stream型別,類似於訊息佇列,用於生產和消費訊息,應該是乙個比較完美的訊息佇列mq的實現。下面就對stream型別和訊息佇列的問題進行說明。本文介紹了,基於st...