小編給大家分享一下redis事務(wù)怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
坡頭網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
事務(wù):
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> sadd "user:1:state" 1
QUEUED
127.0.0.1:6379> SADD "user:2:state" 2
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 1
2) (integer) 1
由MULTI發(fā)起事務(wù),后面的sadd命令來實現(xiàn)關(guān)注和被關(guān)注的操作,redis并沒有執(zhí)行這些命令,而是返回QUEUED表示這兩條命令已經(jīng)進入等待執(zhí)行的事務(wù)隊列中。
當exec之后告訴redis將等待的食物隊列中的所有命令按照發(fā)送順序依次執(zhí)行。exec的返回值順序和命令的順序相同。
1.語法錯誤:
語法錯誤指命令不存在或者命令的參數(shù)個數(shù)不對,如下:
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set name Mike
QUEUED
127.0.0.1:6379> errorcommand name
(error) ERR unknown command 'errorcommand'
127.0.0.1:6379> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
由于存在不正確的命令,redis直接返回錯誤把整個事務(wù)discard了。它連語法正確的都不會執(zhí)行,如下:
127.0.0.1:6379> MGET name
1) (nil)
2.運行錯誤:運行錯誤是命令執(zhí)行時出現(xiàn)的錯誤,比如使用了錯誤命令操作數(shù)據(jù)類型。
這種錯誤redis會繼續(xù)執(zhí)行,redis無法發(fā)現(xiàn)錯誤。
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set name hello
QUEUED
127.0.0.1:6379> SADD name 3
QUEUED
127.0.0.1:6379> SET name "abc"
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
3) OK
127.0.0.1:6379> GET name
"abc"
這種錯誤只能依賴程序員去把握與檢查錯誤。
WATCH命令:監(jiān)控一個或多個鍵,一但其中某個鍵值被修改,之后的事務(wù)就不會執(zhí)行。監(jiān)控會一直持續(xù)到exec命令。
127.0.0.1:6379> SET key 1
OK
127.0.0.1:6379> WATCH key
OK
127.0.0.1:6379> SET key 2
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET key 3
QUEUED
127.0.0.1:6379> EXEC
(nil) // 返回nil,說明監(jiān)視的ticket已經(jīng)改變了,事務(wù)就取消了.
127.0.0.1:6379> GET key
"2"
發(fā)布/訂閱 分別發(fā)布者和訂閱者,訂閱者可以訂閱一個或者若干個頻道,而發(fā)布者可以向指定的頻道發(fā)布消息。所有訂閱此頻道的訂閱者都會受到此消息
發(fā)布消息:
127.0.0.1:6379> PUBLISH newsChannel "good morning news report"
(integer) 0
暫時沒有訂閱者返回為0
訂閱消息:
127.0.0.1:6379> SUBSCRIBE newsChannel
Reading messages... (press Ctrl-C to quit)
1) "subscribe" //subscribe 表示訂閱成功的反饋。第二個值是成功訂閱的頻道名,第三個值是當前客戶端訂閱的頻道數(shù)量。
如果是message 這個類型回復是我們關(guān)心的,表示接收到的消息,第二個值表示產(chǎn)生消息的頻道名稱。第三個值是消息的內(nèi)容。
unsubscribe 取消訂閱某個頻道,第二個值是對應(yīng)的頻道名稱,第三個值是當前客戶端訂閱的頻道數(shù)量。
2) "newsChannel"
3) (integer) 1
利用publish 再次發(fā)布消息:
127.0.0.1:6379> PUBLISH newsChannel "News 2"
(integer) 1
訂閱頻道:
127.0.0.1:6379> SUBSCRIBE newsChannel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "newsChannel"
3) (integer) 1
^[[A1) "message"
2) "newsChannel"
3) "News 2"
可以按照正則表達式訂閱多個頻道:
127.0.0.1:6379> PSUBSCRIBE news*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news*"
3) (integer) 1
PSUBSCRIBE去訂閱以news開頭任意字符結(jié)尾的頻道.
127.0.0.1:6379> PSUBSCRIBE news*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news*"
3) (integer) 1
1) "pmessage"
2) "news*"
3) "newsChannel"
4) "News 3"
以上是“Redis事務(wù)怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!