redis沒有原子性,所以當前事務在操作時,其他事務可以修改,造成錯誤
redis還沒有隔離性
悲觀鎖
樂觀鎖
# 模擬轉賬業務
set money 100
set out 0
watch money #監控 money
muti
decrby money 20
incrby out 20
# 如果在事務提交之前,其他事務對money進行了修改,則 money的 版本號version 增加
# set money 500;
# 此時事務時,會比較version 版本不一樣,則事務提交失敗 不會更新
exec
# 此時要繼續進行轉帳 ,則 需要解鎖 獲取下乙個樂觀鎖
unwatch money #先解鎖
watch money #獲取新的樂觀鎖
muti
decrby money 20
incrby out 20
exec
# exec的時候 版本號沒有修改 則正常執行
cas演算法實現樂觀鎖
aba問題
只能保證乙個共享變數的原子操作
迴圈時間長開銷大
redis鎖機制處理高併發
這裡我們主要利用redis的setnx的命令來處理高併發。setnx 有兩個引數。第乙個引數表示鍵。第二個引數表示值。如果當前鍵不存在,那麼會插入當前鍵,將第二個引數做為值。返回 1。如果當前鍵存在,那麼會返回0。建立庫存表 create table storage id int 11 unsign...
Redis鎖機制處理高併發
文章正文 這裡我們主要利用redis的setnx的命令來處理高併發。setnx 有兩個引數。第乙個引數表示鍵。第二個引數表示值。如果當前鍵不存在,那麼會插入當前鍵,將第二個引數做為值。返回 1。如果當前鍵存在,那麼會返回0。建立庫存表 create table storage id int 11 u...
Redis事務與監控
redis 事務的本質 一組命令的集合 乙個事務中的所有命令都會被序列化,在事務執行過程中,會按照順序執行 一次性 順序性 排他性 執行一系列的命令 佇列set set set 執行 redis的事務 127.0.0.1 6379 multi 開啟事務 ok 命令入隊 127.0.0.1 6379 ...