您好,登錄后才能下訂單哦!
本篇內容主要講解“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開頭的頻道發來的消息。
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命令可以用來監控一個key,通過這種監控,我們可以為redis事務提供(CAS)行為。 如果有至少一個被WATCH監視的鍵在EXEC執行之前被修改了,那么整個事務都會被取消,EXEC返回nil-reply來表示事務已經失敗。如下:
通過unwatch命令,可以取消對一個key的監控,如下:
到此,相信大家對“Redis中的發布訂閱和事務怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。