真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Redis中的發(fā)布訂閱和事務(wù)怎么使用

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

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計、網(wǎng)站建設(shè)與策劃設(shè)計,科爾沁右翼前網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:科爾沁右翼前等地區(qū)??茽柷哂乙砬白鼍W(wǎng)站價格咨詢:13518219792

發(fā)布訂閱

redis的發(fā)布訂閱系統(tǒng)有點類似于我們生活中的電臺,電臺可以在某一個頻率上發(fā)送廣播,而我們可以接收任何一個頻率的廣播,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三個頻道傳來的消息,發(fā)送消息的方式如下:

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

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

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開頭的頻道發(fā)來的消息。

tips

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

事務(wù)

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

127.0.0.1:6379> MULTI
OK

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

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命令發(fā)起執(zhí)行,也可以通過DISCARD命令清空隊列,如下:

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

事務(wù)中的異常情況

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

那么對于這兩種不同的異常,redis中有不同的處理策略。對于第一種錯誤,服務(wù)器會對命令入隊失敗的情況進行記錄,并在客戶端調(diào)用 EXEC 命令時,拒絕執(zhí)行并自動放棄這個事務(wù)(這個是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并沒有對它們進行特別處理, 即使事務(wù)中有某個/某些命令在執(zhí)行時產(chǎn)生了錯誤, 事務(wù)中的其他命令仍然會繼續(xù)執(zhí)行。如下:

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"

不同于關(guān)系型數(shù)據(jù)庫,redis中的事務(wù)出錯時沒有回滾,對此,官方的解釋如下:

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

WATCH命令

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

Redis中的發(fā)布訂閱和事務(wù)怎么使用  

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

Redis中的發(fā)布訂閱和事務(wù)怎么使用  

到此,相信大家對“Redis中的發(fā)布訂閱和事務(wù)怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


文章名稱:Redis中的發(fā)布訂閱和事務(wù)怎么使用
地址分享:http://weahome.cn/article/psiiss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部