redis隊列操作

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)載請附上博文鏈接!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容