Redis學(xué)習(xí)筆記(二)

一、redis事物及鎖應(yīng)用

MULTI、EXEC、DISCARD和WATCH命令是Redis事務(wù)功能的基礎(chǔ)。Redis事務(wù)允許在一次單獨的步驟中執(zhí)行一組命令,并且可以保證如下兩個重要事項:

1、Redis會將一個事務(wù)中的所有命令序列化,然后按順序執(zhí)行。Redis不可能在一個Redis事務(wù)的執(zhí)行過程中插入執(zhí)行另一個客戶端發(fā)出的請求。這樣便能保證Redis將這些命令作為一個單獨的隔離操作執(zhí)行。2、在一個Redis事務(wù)中,Redis要么執(zhí)行其中的所有命令,要么什么都不執(zhí)行,這種特性保證了其原子性。

127.0.0.1:6379> multi          
OK                             
127.0.0.1:6379> decrby wang 100
QUEUED                         
127.0.0.1:6379> incrby zhao 100
QUEUED                         
127.0.0.1:6379> exec           
1) (integer) 600               
2) (integer) 300               
  • Redis事物不支持回滾, 對于隊列中的指令,只能檢查語法錯誤(語法錯誤則直接取消執(zhí)行),不能發(fā)現(xiàn)邏輯錯誤,并且對于之前的指令,執(zhí)行了不能回滾,雖然在multi中可以執(zhí)行discard清空執(zhí)行隊列,但是一旦執(zhí)行,不支持回滾操作。
    PS:由于Redis官網(wǎng)無法正常訪問,只能使用其他漢化手冊(redis參考手冊

Redis使用的是樂觀鎖,只是監(jiān)視事物變化,一旦變化,則視為異常,阻止事物的執(zhí)行

//使用鎖正常時
127.0.0.1:6379> set ticket 1   
OK                             
127.0.0.1:6379> watch ticket   
OK                             
127.0.0.1:6379> multi          
OK                             
127.0.0.1:6379> decr ticket    
QUEUED                         
127.0.0.1:6379> decrby lisi 100
QUEUED                         
127.0.0.1:6379> exec           
1) (integer) 0                 
2) (integer) 400
//使用鎖異常時
127.0.0.1:6379> set ticket 1   
OK                             
127.0.0.1:6379> watch ticket   
OK                             
127.0.0.1:6379> multi          
OK                             
127.0.0.1:6379> decr ticket    
QUEUED                         
127.0.0.1:6379> decrby lisi 100
QUEUED                         
127.0.0.1:6379> exec           
(nil)                                                               

二、消息發(fā)布與訂閱

  • 消息發(fā)布
127.0.0.1:6379> publish news "Hello World!"
(integer) 0                                
127.0.0.1:6379> publish news "Hello World!"
(integer) 1                                
  • 監(jiān)聽(監(jiān)聽端口可以加入通配符等,來一次監(jiān)聽多個端口)
127.0.0.1:6379> subscribe news            
Reading messages... (press Ctrl-C to quit)
1) "subscribe"                            
2) "news"                                 
3) (integer) 1                            
1) "message"                              
2) "news"                                 
3) "Hello World!"                         
  • 使用pubsub channels命令可以查看有哪些端口被監(jiān)聽
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 超強、超詳細(xì)Redis入門教程 轉(zhuǎn)載2017年03月04日 16:20:02 16916 轉(zhuǎn)載自: http://...
    邵云濤閱讀 17,634評論 3 313
  • 本文摘自Redis學(xué)習(xí)(一) Redis初步入門。 Redis和同類產(chǎn)品的比較 根據(jù)Redis的簡介,Redis可...
    萌媽碼碼閱讀 2,594評論 0 0
  • 五種數(shù)據(jù)結(jié)構(gòu)簡介 Redis是使用C編寫的,內(nèi)部實現(xiàn)了一個struct結(jié)構(gòu)體redisObject對象,通過結(jié)構(gòu)體...
    彥幀閱讀 7,171評論 0 14
  • redis是什么 redis是一個開源的、使用C語言編寫的、支持網(wǎng)絡(luò)交互的、可基于內(nèi)存也可持久化的Key-Valu...
    燁楓_邱閱讀 837評論 0 6
  • 以前聽說,當(dāng)一個人開始回憶過去時,就代表著他老了,至少是心理上。成年之前,我一直告誡自己:來路不可眷戀,千萬別回頭...
    初夏清歡閱讀 264評論 0 0

友情鏈接更多精彩內(nèi)容