redis隊列操作redis-MQ
redis的隊列效率高,而且簡單易用。下面我說一個最近項目中的需求,來介紹reids隊列,更容易理解并且當(dāng)你也有這種項目中類似的需求的時候可以很輕松的拿來用。
首先我的項目需要根據(jù)傳遞的不同的參數(shù),爬取境外網(wǎng)站的一些內(nèi)容,例如facebook中。但是項目目前的服務(wù)器不能翻墻,所以要在另一臺服務(wù)器上運行爬蟲,在目前項目服務(wù)器上傳參數(shù)給翻墻過的服務(wù)器用來運行爬蟲。
lpush, lrange
首先我需要把參數(shù)塞到redis服務(wù),現(xiàn)在第一步從左往右插入隊列。用lpush,然后用lrange直接驗證是否插入成功,代碼如下:
push_params.py
#-*-coding:utf-8-*-
import redis
import json
# redis連接
re_queue = redis.Redis(host='localhost', port=6379 )
# 順序插入五條數(shù)據(jù)到redis隊列,sort參數(shù)是用來驗證彈出的順序
num = 0
for i in range(0, 5):
? ? num = num + 1
? ? # params info
? ? params_dict = {"channel":"facebook", "operate":"publish", "sort":num}
? ? # 從左往右入隊到redis
? ? re_queue.lpush("params_info", json.dumps(params_dict))
# 查看目標(biāo)隊列數(shù)據(jù)
result = re_queue.lrange("params_info", 0, 10)
print(result)
# 結(jié)果輸出
# [b'{"channel": "facebook", "operate": "publish", "sort": 5}', b'{"channel": "facebook", "operate": "publish", "sort": 4}', b'{"channel": "facebook", "operate": "publish", "sort": 3}', b'{"channel": "facebook", "operate": "publish", "sort": 2}', b'{"channel": "facebook", "operate": "publish", "sort": 1}']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
rpop
從左往右,第一個進(jìn)的肯定是在最右邊,要處理第一個,就要從右往左彈出,代碼如下:
pop_params.py
#-*-coding:utf-8-*-
import redis
import json
# redis連接
re_queue = redis.Redis(host='localhost', port=6379)
for i in range(0, 5):
? ? result = re_queue.rpop("params_info")
? ? print(result)
# 結(jié)果輸出
#b'{"channel": "facebook", "operate": "publish", "sort": 1}'
#b'{"channel": "facebook", "operate": "publish", "sort": 2}'
#b'{"channel": "facebook", "operate": "publish", "sort": 3}'
#b'{"channel": "facebook", "operate": "publish", "sort": 4}'
#b'{"channel": "facebook", "operate": "publish", "sort": 5}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
rpush,lpop
rpush從右往左入隊,第一個在最左邊,把上邊lpush改成rpush,輸出結(jié)果如下:
[b'{"channel": "facebook", "operate": "publish", "sort": 1}', b'{"channel": "facebook", "operate": "publish", "sort": 2}', b'{"channel": "facebook", "operate": "publish", "sort": 3}', b'{"channel": "facebook", "operate": "publish", "sort": 4}', b'{"channel": "facebook", "operate": "publish", "sort": 5}']
1
1
lpop從左邊彈出結(jié)果如下:
把上邊rpop改成lpop,輸出結(jié)果如下:
b'{"channel": "facebook", "operate": "publish", "sort": 1}'
b'{"channel": "facebook", "operate": "publish", "sort": 2}'
b'{"channel": "facebook", "operate": "publish", "sort": 3}'
b'{"channel": "facebook", "operate": "publish", "sort": 4}'
b'{"channel": "facebook", "operate": "publish", "sort": 5}'
1
2
3
4
5
1
2
3
4
5
小結(jié)
這些出對入隊的方式理解了之后,你就對redis的隊列有了一定的認(rèn)識,最終到底怎么用,還是看你的項目需要了。真正的項目應(yīng)用中,是在原來項目中把另一臺服務(wù)器需要的參數(shù)傳到目標(biāo)redis服務(wù)端,地址也不是localhost,需要你把localhost改成目標(biāo)host,端口也需要根據(jù)你們設(shè)置的端口進(jìn)行更改,默認(rèn)的是6379。push到redis隊列之后,接下來就要在你需要的服務(wù)器上取出redis隊列中的參數(shù),現(xiàn)在你取出參數(shù)之后就要根據(jù)參數(shù)的區(qū)別進(jìn)行不同的調(diào)用了。
---------------------
作者:chinesepython
來源:CSDN
原文:https://blog.csdn.net/chinesepython/article/details/82867629
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!