成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來到九壹網(wǎng)。
搜索
您的當(dāng)前位置:首頁redis 學(xué)習(xí)筆記三(隊列功能)

redis 學(xué)習(xí)筆記三(隊列功能)

來源:九壹網(wǎng)

Redis隊列功能介紹

List

常用命令:

Blpop刪除,并獲得該列表中的第一元素,或阻塞,直到有一個可用

Brpop刪除,并獲得該列表中的最后一個元素,或阻塞,直到有一個可用

Brpoplpush

Lindex獲取一個元素,通過其索引列表

Linsert在列表中的另一個元素之前或之后插入一個元素

Llen獲得隊列(List)的長度

Lpop從隊列的左邊出隊一個元素

Lpush從隊列的左邊入隊一個或多個元素

Lpushx當(dāng)隊列存在時,從隊到左邊入隊一個元素

Lrange從列表中獲取指定返回的元素

Lrem從列表中刪除元素

Lset設(shè)置隊列里面一個元素的值

Ltrim修剪到指定范圍內(nèi)的清單

Rpop從隊列的右邊出隊一個元素

Rpoplpush刪除列表中的最后一個元素,將其追加到另一個列表

Rpush從隊列的右邊入隊一個元素

Rpushx從隊列的右邊入隊一個元素,僅隊列存在時有效

?

Redis支持phppython、c等接口

?

?

?

?

?

?

?

?

應(yīng)用場景:

Redis?list的應(yīng)用場景非常多,也是Redis最重要的數(shù)據(jù)結(jié)構(gòu)之一,比如的關(guān)注列表,粉絲列表等都可以用Redislist結(jié)構(gòu)來實現(xiàn)。

Lists?就是鏈表,相信略有數(shù)據(jù)結(jié)構(gòu)知識的人都應(yīng)該能理解其結(jié)構(gòu)。使用Lists結(jié)構(gòu),我們可以輕松地實現(xiàn)最新消息排行等功能。

Lists的另一個應(yīng)用就是消息隊列,

可以利用ListsPUSH操作,將任務(wù)存在Lists中,然后工作線程再用POP操作將任務(wù)取出進(jìn)行執(zhí)行。Redis還提供了操作Lists中某一段的api,你可以直接查詢,刪除Lists中某一段的元素。

?

如果需要還可以用redisSorted-Sets數(shù)據(jù)結(jié)構(gòu)來做優(yōu)先隊列.可以給每條消息加上一個唯一的序號。這里就不詳細(xì)介紹了。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

實現(xiàn)方式:

Redis?list的實現(xiàn)為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內(nèi)存開銷,Redis內(nèi)部的很多實現(xiàn),包括發(fā)送緩沖隊列等也都是用的這個數(shù)據(jù)結(jié)構(gòu)。

??

?

?

?

?

?

?

?

?

?

?

?

示意圖:

1)入隊

?

?

?

?

?

?

?

?

?

?

?

2)出隊(非阻塞模式)

?

?

lpop彈出列表首元素(即最后入隊的元素)

?

?

?

?

?

?

Rpop彈出列表尾元素?(即入隊的最開始的一個元素)

注意:如果要當(dāng)作隊列功能,應(yīng)該是用這個出隊

?

?

這里的出隊都是非阻塞模式,就是你用pop出隊的時候,如果隊列是空的話,你得到的是一個NULL的值

?

?

?

?

?

?

?

?

?

?

?

3)出隊(阻塞模式)

假如現(xiàn)在queue隊列為空??我們用brpop命令

?是一個阻塞的列表彈出原語。?它是??的阻塞版本,因為這個命令會在給定list無法彈出任何元素的時候阻塞連接。?該命令會按照給出的?key?順序查看?list,并在找到的第一個非空?list?的尾部彈出一個元素。

?

?

?

?

A)

我們執(zhí)行brpop命令

可以看到隊列queue沒有元素的時候??是阻塞的??即不返回值????

其中0是超時時間?為0表示一直等待

?

B)

這個時候我們用lpush往隊列里?入隊一個數(shù)據(jù)“bbb

?

C)

阻塞的隊列立馬會彈出出隊元素???顯示隊列名字??和?出隊元素??已經(jīng)等待了多少時間

?

D)

Brpop還能同時阻塞多個隊列比如這樣

?

?

?

?

用redis的list當(dāng)作隊列可能存在的問題

1)redis崩潰的時候隊列功能失效

2)如果入隊端一直在塞數(shù)據(jù),而出隊端沒有消費(fèi)數(shù)據(jù),或者是入隊的頻率大而多,出隊端的消費(fèi)頻率慢會導(dǎo)致內(nèi)存暴漲

3)Redis的隊列也可以像rabbitmq那樣??即可以做消息的持久化,也可以不做消息的持久化。

當(dāng)做持久話的時候,需要啟動redisdump數(shù)據(jù)的功能.暫時不建議開啟持久化。

?

Redis其實只適合作為緩存,而不是數(shù)據(jù)庫或是存儲。它的持久化方式適用于救救急啥的,不太適合當(dāng)作一個普通功能來用。應(yīng)為dump時候,會影響性能,數(shù)據(jù)量小的時候還看不出來,當(dāng)數(shù)據(jù)量達(dá)到百萬級別,內(nèi)存10g左右的時候,非常影響性能。

?

4)假如有多個消費(fèi)者同時監(jiān)聽一個隊列,其中一個出隊了一個元素,另一個則獲取不到該元素

5)Redis的隊列應(yīng)用場景是一對多或者一對一的關(guān)系,即有多個入隊端,但是只有一個消費(fèi)端(出隊)

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

PHP的redis?簡單操作示例

?

因篇幅問題不能全部顯示,請點(diǎn)此查看更多更全內(nèi)容

Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號-2

違法及侵權(quán)請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬商天勤律師事務(wù)所王興未律師提供法律服務(wù)