中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis可以用來做什么

發布時間:2020-10-19 17:34:15 來源:億速云 閱讀:158 作者:小新 欄目:關系型數據庫

這篇文章將為大家詳細講解有關redis可以用來做什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

 Redis不僅可作為緩存服務器,還可用作消息隊列。它的列表類型天生支持用作消息隊列。

由于Redis的列表是使用雙向鏈表實現的,保存了頭尾節點,所以在列表頭尾兩邊插取元素都是非常快的。

所以可以直接使用Redis的List實現消息隊列,只需簡單的兩個指令lpush和rpop或者rpush和lpop。

但是會有消息消費者有一個問題存在,即需要不停的調用rpop方法查看List中是否有待處理消息。每調用一次都會發起一次連接,這會造成不必要的浪費。也許你會使用Thread.sleep()等方法讓消費者線程隔一段時間再消費,但這樣做有兩個問題:

1)、如果生產者速度大于消費者消費速度,消息隊列長度會一直增大,時間久了會占用大量內存空間。

2)、如果睡眠時間過長,這樣不能處理一些時效性的消息,睡眠時間過短,也會在連接上造成比較大的開銷。

所以可以使用brpop指令,這個指令只有在有元素時才返回,沒有則會阻塞直到超時返回null,然后可以運行Customer,清空控制臺,可以看到程序沒有任何輸出,阻塞在了brpop這兒。然后在打開Redis的客戶端,輸入指令client list,可以查看當前有兩個連接。

Redis除了對消息隊列提供支持外,還提供了一組命令用于支持發布/訂閱模式。

1)發布

PUBLISH指令可用于發布一條消息,格式 PUBLISH channel message

返回值表示訂閱了該消息的數量。

2)訂閱

SUBSCRIBE指令用于接收一條消息,格式 SUBSCRIBE channel

可以看到使用SUBSCRIBE指令后進入了訂閱模式,但沒有接收到publish發送的消息,這是因為只有在消息發出去前訂閱才會接收到。在這個模式下其他指令,只能看到回復。

回復分為三種類型:

1、如果為subscribe,第二個值表示訂閱的頻道,第三個值表示是第幾個訂閱的頻道?(理解成序號?)

2、如果為message(消息),第二個值為產生該消息的頻道,第三個值為消息

3、如果為unsubscribe,第二個值表示取消訂閱的頻道,第三個值表示當前客戶端的訂閱數量。

可以使用指令UNSUBSCRIBE退訂,如果不加參數,則會退訂所有由SUBSCRIBE指令訂閱的頻道。

Redis還支持基于通配符的消息訂閱,使用指令PSUBSCRIBE (pattern subscribe)。

可以看到publish指令返回的是2,而訂閱端這邊接收了兩次消息。這是因為PSUBSCRIBE指令可以重復訂閱頻道。而使用PSUBSCRIBE指令訂閱的頻道也要使用指令PUNSUBSCRIBE指令退訂,該指令無法退訂SUBSCRIBE訂閱的頻道,同理UNSUBSCRIBE也不能退訂PSUBSCRIBE指令訂閱的頻道。同時PUNSUBSCRIBE指令通配符不會展開。

總結:

使用Redis的List數據結構可以簡單迅速地做一個消息隊列,同時Redis提供的BRPOP和BLPOP等指令解決了頻繁調用Jedis的rpop和lpop方法造成的資源浪費問題。除此之外,Redis提供對發布/訂閱模式的指令,可以實現消息傳遞、進程間通信。

關于redis可以用來做什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正阳县| 宁陕县| 崇信县| 灵璧县| 阿城市| 阿瓦提县| 专栏| 永靖县| 福清市| 永济市| 长武县| 临高县| 石门县| 罗城| 临武县| 巍山| 民县| 临泽县| 台安县| 张家口市| 泸定县| 绥芬河市| 阳山县| 甘孜| 民乐县| 泰来县| 吉安县| 洞头县| 福州市| 丰镇市| 西乌珠穆沁旗| 南靖县| 进贤县| 庄河市| 康保县| 牙克石市| 三都| 湛江市| 扎赉特旗| 鄯善县| 连江县|