Redis學習 6 事務

2021-10-06 21:16:50 字數 792 閱讀 6480

當多個客戶端需要操作同乙個key時,就涉及到鎖的問題了,在redis中,提供乙個可以監視所需要操作的key的方法:

對於watch來說,重點是修改key,一旦key被修改,事務就被取消,但是對於搶購來說,不可能別人買了東西,你就不能買了,正常來說,只要這個商品還有,就能夠購買。

這個時候就需要用到分布式鎖,分布式鎖的原理其實也比較簡單,用set命令就可以做到。分析搶購的場景我們可以知道,加鎖應該是對乙個商品來加鎖,比如搶購可樂,我們可以定義乙個鎖:lock-cola,在購買前,我們先看看這個鎖有沒有其他人用,沒人用那我就去買,如果有人在用了,那我就在後面排隊。

怎麼看這鎖有沒有人在用呢?setnx lock-cola 1,如果我們設值失敗的話,說明這個key已經存在,也就是說已經有人在我前面鎖住了,如果我們設值成功,那就說明我們可以正常購買,同時給這個商品加了鎖,在我買完之前,別人不能買,然後我們買完東西後在把key刪了,後面的人就可以正常購買了。

但是關於這個setnx,有2點需要注意

關於鎖的key的定義需要有統一的規範,如果對於同乙個商品,每個人鎖的不一樣,那就沒有意義。

為了防止乙個客戶端在上了鎖後宕機,導致這個鎖不能被釋放,通常要給鎖設定過期時間,這個過期時間具體是多少需要更具實際場景來定,如果我們使用setnx,那麼設定過期時間必然需要第二條命令,這不能保證操作的原子性,所以推薦使用set key value [ex seconds] [px milliseconds] nx

Redis學習筆記 Redis事務

redis事務可以一次執行多個命令 按順序地序列執行,執行中不會被其他命令插入,不許加塞 1.簡介 redis事務可以一次執行多個命令 允許在一次單獨的步驟中執行一組命令 特徵 1 批量操作在傳送exec命令前被放入佇列快取 2 收到exec命令後進入事務執行,事務中任意命令執行失敗,其餘的命令依然...

redis學習之redis事務

redis事務的本質是一組命令的集合。事務支援一次執行多個命令,乙個事務中所有命令都會被序列化。在事務執行過程中,會按照順序序列化執行佇列中的命令,其他客戶端提交的命令請求不會插入到事務執行命令序列中。總結來說 redis事務就是一次性 順序性 排他性的執行乙個佇列中的一系列命令。批量操作在傳送ex...

redis學習之redis事務

redis的事務可以一次執行多個命令,本質是一組命令的集合。乙個事務中所有的命令都會被序列化,按順序序列執行且不會被其它命令插入。redis的事務分為3個階段,分別是開始事務 命令入隊 執行事務。multi 標記乙個事務塊的開始 exec 執行事務塊內的所有命令 discard 取消事務,放棄執行事...