91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Redis中的發布訂閱和事務怎么使用

發布時間:2021-12-07 13:44:38 來源:億速云 閱讀:144 作者:iii 欄目:大數據

本篇內容主要講解“Redis中的發布訂閱和事務怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Redis中的發布訂閱和事務怎么使用”吧!

發布訂閱

redis的發布訂閱系統有點類似于我們生活中的電臺,電臺可以在某一個頻率上發送廣播,而我們可以接收任何一個頻率的廣播,Android中的broadcast也和這類似。

訂閱消息的方式如下:

127.0.0.1:6379> SUBSCRIBE c1 c2 c3
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "c1"
3) (integer) 1
1) "subscribe"
2) "c2"
3) (integer) 2
1) "subscribe"
2) "c3"
3) (integer) 3

這個表示接收c1,c2,c3三個頻道傳來的消息,發送消息的方式如下:

127.0.0.1:6379> PUBLISH c1 "hello redis!"
(integer) 1

當c1這個頻道上有消息發出時,此時在消息訂閱控制臺可以看到如下輸出:

1) "message"
2) "c1"
3) "hello redis!"

在redis中,我們也可以使用模式匹配訂閱,如下:

127.0.0.1:6379> PSUBSCRIBE c*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "c*"
3) (integer) 1

此時可以接收到所有以c開頭的頻道發來的消息。

tips

redis中的發布訂閱系統在某些場景下還是非常好用的,但是也有一些問題需要注意:由于網絡在傳輸過程中可能會遭遇斷線等意外情況,斷線后需要進行重連,然而這會導致斷線期間的數據丟失。

事務

既然redis是一種NoSQL數據庫,那它當然也有事務的功能,不過這里的事務和我們關系型數據庫中的事務有一點點差異。
redis中事務的用法非常簡單,我們通過MULTI命令開啟一個事務,如下:

127.0.0.1:6379> MULTI
OK

在MULTI命令執行之后,我們可以繼續發送命令去執行,此時的命令不會被立馬執行,而是放在一個隊列中,如下:

127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED

當所有的命令都輸入完成后,我們可以通過EXEC命令發起執行,也可以通過DISCARD命令清空隊列,如下:

127.0.0.1:6379> EXEC
1) OK
2) OK
3) OK

事務中的異常情況

redis中事務的異常情況總的來說分為兩類:
1.進入隊列之前就能發現的錯誤,比如命令輸錯;
2.執行EXEC之后才能發現的錯誤,比如給一個非數字字符加1;

那么對于這兩種不同的異常,redis中有不同的處理策略。對于第一種錯誤,服務器會對命令入隊失敗的情況進行記錄,并在客戶端調用 EXEC 命令時,拒絕執行并自動放棄這個事務(這個是2.6.5之后的版本做法,之前的版本做法小伙伴可以參考官方文檔)。如下:

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set kv1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3 3 3
QUEUED
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
3) (error) ERR syntax error
4) OK
127.0.0.1:6379> keys *
1) "k4"
2) "k2"
3) "kv1"

而對于第二種情況,redis并沒有對它們進行特別處理, 即使事務中有某個/某些命令在執行時產生了錯誤, 事務中的其他命令仍然會繼續執行。如下:

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set k1 vv
QUEUED
127.0.0.1:6379> INCR k1
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (error) ERR value is not an integer or out of range
127.0.0.1:6379> GET k1
"vv"

不同于關系型數據庫,redis中的事務出錯時沒有回滾,對此,官方的解釋如下:

Redis 命令只會因為錯誤的語法而失敗(并且這些問題不能在入隊時發現),或是命令用在了錯誤類型的鍵上面:這也就是說,從實用性的角度來說,失敗的命令是由編程錯誤造成的,而這些錯誤應該在開發的過程中被發現,而不應該出現在生產環境中。因為不需要對回滾進行支持,所以 Redis 的內部可以保持簡單且快速。

WATCH命令

事務中的WATCH命令可以用來監控一個key,通過這種監控,我們可以為redis事務提供(CAS)行為。 如果有至少一個被WATCH監視的鍵在EXEC執行之前被修改了,那么整個事務都會被取消,EXEC返回nil-reply來表示事務已經失敗。如下:

Redis中的發布訂閱和事務怎么使用  

通過unwatch命令,可以取消對一個key的監控,如下:

Redis中的發布訂閱和事務怎么使用  

到此,相信大家對“Redis中的發布訂閱和事務怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

汉源县| 昌乐县| 祁连县| 武安市| 日土县| 灌南县| 曲水县| 景宁| 五家渠市| 佳木斯市| 社旗县| 平阴县| 双牌县| 汝州市| 兰溪市| 乌海市| 五华县| 嵊泗县| 宜川县| 巴林左旗| 个旧市| 光泽县| 武胜县| 玛多县| 化隆| 济南市| 民勤县| 黔西| 会宁县| 辉县市| 商河县| 喜德县| 方城县| 祁东县| 鄂托克前旗| 康保县| 隆子县| 江油市| 江源县| 红河县| 肃宁县|