redis事務及鎖應用 發布訂閱模式

2021-07-24 20:30:41 字數 1575 閱讀 7175

mysql和ridis事務對比:

redis事務時執行命令放到了佇列裡。

注:rollback與discard的區別

如果已經成功執行了2條語句,第三條語句出錯

rollback後前2條語句影響消失。

discard只是結束本次事務,前2句造成的影響還在。

注:在multi後面的語句中,語句出錯可能有2中情況

1.語法就有問題

這種exec時,所有語句都得不到執行

2.語法沒錯,但使用物件有問題,比如zadd操作list物件。exec之後,會執行正確的語句,並跳過有不適當的語句。

watch監控key

watch命令會監視給定的key,當exec時候如果監視的key從呼叫watch後發生過變化,則整個事務會失敗。也可以呼叫watch多次監視多個key.這 樣就可以對指定的key加樂觀鎖了。注意watch的key是對整個連線有效的,事務也一樣。如果連線斷開,監視和事務都會被自動清除。當然了exec,discard,unwatch命令都會清除連線中的所有監視。

be用法:

watch key1 key2 ... keyn

作用監聽key1 key2 keyn有沒有變化,如果有變化,則事務取消

例如:客戶端1:設定了watch一張票的數目,然後開啟multi事務,當他在執行exec前,客戶端2買了這張票,exec會執行失敗。

unwatch

取消所有watch監聽

樂觀鎖和悲觀鎖區別:**自:

悲觀鎖(pessimistic lock), 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。

樂觀鎖(optimistic lock), 顧名思義,就是很樂觀,每次去拿資料的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個資料,可以使用版本號等機制。樂觀鎖適用於多讀的應用型別,這樣

可以提高吞吐量

,像資料庫如果提供類似於write_condition機制的其實都是提供的樂觀鎖。

兩種鎖各有優缺點,不可認為一種好於另一種,像

樂觀鎖適用於寫比較少的情況下

,即衝突真的很少發生的時候,這樣可以省去了鎖的開銷,加大了系統的整個吞吐量。但

如果經常產生衝突

,上層應用會不斷的進行retry,這樣反倒是降低了效能,所以這種情況下用悲觀鎖就比較合適。

模式:publish----->頻道-----》subscribe

下面的channel代表頻道名:

publish channel

內容 --發布新聞內容

subscribe channel

內容 --訂閱新聞頻道

注意:1.如果先發布,客戶端未此時未訂閱,之後客戶端訂閱不會顯示之前發布的訊息。

psubscribe channel*

凡是channel開頭的頻道,全部監聽 

redis發布訂閱及事務

redis發布訂閱 例 訂閱者 redis 127.0.0.1 6379 subscribe redischat reading messages.press ctrl c to quit 1 subscribe 2 redischat 3 integer 1 發布者 redis 127.0.0.1...

Redis事務及訊息發布與訂閱

把一組資料庫運算元據庫的語句放在一起執行,保證操作的原子性。要麼同時成功要麼同時失敗。在redis的事務中,允許把一組redis命令放在一起,把命令序列化,然後一起執行,保證部分原子性。命令 作用multi 用來標記乙個事務的開始,將執行的一組命令放到佇列中。exec 用來執行事務 discard ...

redis事務及鎖應用

redis事務及鎖應用 redis支援簡單的事務 redis與mysql事務的對比 redis mysql 開啟multi start transaction 語句普通命令 普通sql 失敗discard取消 rollback回滾 成功exec commit 注 rollback與discard的區...