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的區...