Redis事務及訊息釋出與訂閱
阿新 • • 發佈:2021-01-30
Redis事務
把一組資料庫操作資料庫的語句放在一起執行,保證操作的原子性。要麼同時成功要麼同時失敗。在Redis的事務中,允許把一組Redis命令放在一起,把命令序列化,然後一起執行,保證部分原子性。
命令 | 作用 |
---|---|
multi | 用來標記一個事務的開始,將執行的一組命令放到佇列中。 |
exec | 用來執行事務 |
discard | 清除所有已經放入事務佇列中的命令,並且結束整個事務。 |
watch | 監控某一個key,當事務在執行過程中,對應的value發生變化 |
unwatch [key] | 放棄監控某個或者所有的key |
如果在放入事務的佇列時,命令發生嚴重的錯誤就會無法保證事務的原則性。此時執行事務就會報錯。
如果一組命令中,在放入事務佇列的過程正常,但是在執行事務佇列命令時發生了錯誤,則只會影響發生錯誤的命令,不會影響其他命令的執行,所以不能保證事務的原子性。
使用事務案例
watch version
multi
decrby balance 50
incrby balance2 50
exec
這個案例模擬的是轉賬場景,事務開始之前監控的是version,當version發生改變說明有人對賬戶中的餘額進行 了變動。
Redis事務特點
1、單獨的的隔離操作:事務中的所有命令都會序列化、順序的執行。事務在執行過程中,不會被其他客戶端發來的命令請求所打斷,除非使用watch命令監控某些鍵
2、不保證事務的原子性:Redis同在一個事務中如果一些命令執行失敗,其後的命令仍然可能會執行成功,redis的事務沒有回滾。由於Redis是一種記憶體資料庫所以為了提高效能犧牲了事務的回滾操作。
Redis訊息釋出與訂閱
Redis訊息釋出與訂閱是指:Redis客戶端之間的通訊。Redis為了實現客戶端之間的通訊所以提出了"頻道"的概念,當Redis客戶端訂閱頻道時,訊息的釋出者只需要在該頻道上釋出訊息即可。
相關命令
命令 | 作用 |
---|---|
subscribe | 訂閱一個或者多個頻道 |
psubscribe | 訂閱一個或者多個頻道,頻道名支援萬用字元。 |
publish | 將訊息釋出到指定頻道 |