watch: 監控某個或幾個key的變化
multi: 接下來的命令不會立馬執行,會先放入乙個事務的佇列中
exec: 執行事務佇列中的命令
unwatch: 可以在watch執行之後 multi命令執行之前執行,效果是解除對某個key的監控
discard:可以在multi命令執行之後exec命令執行之前執行,效果是解除對某個key的監控並且移除事務佇列中的命令。
現在有乙個交易市場,市場中的商品都儲存在redis中的zset結構中 鍵是商品名,score是商品的**
> zrange market 0 -1 withscores1) "iphone"2) "100"3) "mac"4) "200"
這是乙個顧客a要買市場中的一件商品(iphone),我們分析一下乙個購買過程都發生了什麼
從a顧客的錢包扣除100元
商家的錢包加100元
iphone商品從商場移除
這個過程中「iphone」這件商品有沒有在交易過程中被其他人買走是此次交易是否能成功的關鍵(假設iphone只有一件)。所以我們需要將上面3步放入乙個事務中來執行。
watch marketmulti 從a顧客的錢包扣除100元 商家的錢包加100元 iphone商品從商場移除 command...exec
解釋:
1.watch market 實現對market是否發生改變的監控。
2.multi 效果是將之後的命令放入乙個事務佇列中先不執行。
3.exec 對上面放入佇列中的命令依次執行,這裡redis可以保證佇列中的命令依次執行並且其他客戶端的請求要等佇列中的命令執行完之後才會被處理。
4.如果在交易過程中market 發生變化(被其他客戶端修改),當執行exec命令時交易(multi和exec之間的命令)不會被執行。
這邊部落格總結的挺好
關於redis中Zset元素的使用
zset在set基礎上增加了乙個排序 權值 需手動指定,分數越小,越排前面 zadd zadd name 序號 value 序號2 value2 依據序號的重要程度排序 zrange zrange name start end 查詢zset中的元素,預設從小到大排序,若要從大到小,使用zrevran...
關於redis中zset底層跳表的理解
跳表是乙個隨機化的資料結構,實質就是一種可以進行二分查詢的有序鍊錶。跳表在原有的有序鍊錶上面增加了多級索引,通過索引來實現快速查詢。跳表不僅能提高搜尋效能,同時也可以提高插入和刪除操作的效能。考慮乙個有序鍊錶,我們要查詢3 7 17這幾個元素,我們只能從頭開始遍歷鍊錶,直到查詢到元素為止。上述這個鍊...
ZSET在訂單支付與統計中的應用
在購買高鐵票時,使用者下單會有乙個30min內支付都有效的情景,如果超過30min未支付或主動取消,會釋放佔座資訊 解決方案 使用zset儲存下單資訊,訂單號作為key,下單unix時間戳作為score 1 可以方便獲取訂單下單時間,計算還剩多少有效支付時間 2 使用者在30min內支付或主動取消訂...