Python使用redis的消息队列
Redis 服務(wù)
1、安裝
yum install redis2、 python安裝支持模塊
/opt/python2.7.13/bin/pip install redis3、 和redis的簡單直接交互
In [1]: import redisIn [2]: rc = redis.Redis(host='192.168.8.237',port=6379,decode_responses=True)In [5]: rc.set('imoocc','jeson')Out[5]: TrueIn [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]: TrueIn [11]: rc.get('imooccp')Out[11]: u'1234566'2、redis中DB ,指定數(shù)據(jù)存取的DB
redis.conf中設(shè)置了db的數(shù)量,那么redis的數(shù)據(jù)庫名也為0 到15,如下:
databases 16
指定使用那個數(shù)據(jù)庫名,我們通過如下的方式,就可以了:
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! '''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這樣就將數(shù)據(jù)庫寫入到db3了,如何驗(yàn)證呢?我們從服務(wù)端來認(rèn)證最直接,如下:
用redis-cli(redis自帶的工具)登錄服務(wù)端,查看寫入的key。
127.0.0.1:6379> SELECT 3OK127.0.0.1:6379[3]> KEYS * //查看db 3這個庫下所有的key1) "imooccc"那么 接下來介紹redis詳細(xì)項(xiàng)目使用的內(nèi)容,大家不要覺得介紹的內(nèi)容擴(kuò)散太大。
最近在作一個任務(wù)系統(tǒng),任務(wù)寫入是不定時(shí)的,我們需要用一個程序去定期消費(fèi)這些任務(wù),必須是有先后順序的,而且是前一個任務(wù)確認(rèn)執(zhí)行完后,才會去執(zhí)行下一個。
怎么辦呢?用隊(duì)列啊,對吧!用什么隊(duì)列,怎么用?
介紹下為什么要用redis來作消息處理:
簡單說,redis支持兩種消費(fèi)模式,一種發(fā)布-訂閱模式,及一個消息會被多個消費(fèi)者處理(簡單說類似是一個廣播消息,所有人都會接收)。很明顯我得系統(tǒng)中不需要這么用,系統(tǒng)里邊就需要隊(duì)列模式,及先到的任務(wù)優(yōu)先處理。那么對隊(duì)列用什么類型得數(shù)據(jù)庫結(jié)構(gòu)來作呢?
先得聊聊list
list 這個數(shù)據(jù)類型,在python里是一個列表,在redis里就是一個有序隊(duì)列(或者說數(shù)據(jù)鏈表)了。
類型圖示如下:
大家看了這個結(jié)構(gòu)就可以清楚了,我們可以利用list的數(shù)據(jù)接口模式,設(shè)計(jì)從左端和右端都可以對list進(jìn)元素的同向處理(滿足隊(duì)列的特性先到先出)。
1、從左端插入元素
In [10]: rc.lpush('tasklist',1,2,3)Out[10]: 3L打印輸出內(nèi)容,如下:
In [17]: print(rc.lrange('tasklist',0,2))[u'3', u'2', u'1']類似的從左測插入的方法還有l(wèi)pushx(name,value),區(qū)別只有當(dāng)name存在才將value插入到最左邊。
2、從右邊插入元素
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' In [21]: rc.rpush('tasklist','5')Out[21]: 5LIn [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']我們會看到從左側(cè)已經(jīng)取出了兩個元素了。剩下來[u’2’, u’1’, u’5’]
4、從右側(cè)呢?
當(dāng)然就是rc.rpop()了
python對于redis的基礎(chǔ)使用和Redis作為隊(duì)列的簡單使用就介紹這些
總結(jié)
以上是生活随笔為你收集整理的Python使用redis的消息队列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python超详细的字符串用法大全
- 下一篇: 在Python中变量名这样写,就是给自己