Redis事務

1.Redis事務介紹數據庫

  能夠一次執行多個命令,本質是一組命令的集合。一個事務中的全部命令都會序列化,按順序地串行化執行而不會被其它命令插入,不準加塞.spa

  一個隊列中,一次性、順序性、排他性的執行一系列命令3d

2.Redis事務命令blog

 

1)正常執行隊列

127.0.0.1:6379> MULTI事務

OKci

127.0.0.1:6379> set k1 v1get

QUEUEDio

127.0.0.1:6379> set k2 v2table

QUEUED

127.0.0.1:6379> get k2

QUEUED

127.0.0.1:6379> set k3 v3

QUEUED

127.0.0.1:6379> EXEC

1) OK

2) OK

3) "v2"

4) OK

2)放棄事務

127.0.0.1:6379> MULTI

OK

127.0.0.1:6379> set k1 v1

QUEUED

127.0.0.1:6379> set k2 22

QUEUED

127.0.0.1:6379> set k3 33

QUEUED

127.0.0.1:6379> DISCARD

OK

127.0.0.1:6379> get k2

"v2"

3)全體連坐

127.0.0.1:6379> MULTI

OK

127.0.0.1:6379> set k1 v1

QUEUED

127.0.0.1:6379> set k2 v2

QUEUED

127.0.0.1:6379> set k3 v3

QUEUED

127.0.0.1:6379> getset k3

(error) ERR wrong number of arguments for 'getset' command

127.0.0.1:6379> set k4 v4

QUEUED

127.0.0.1:6379> set k5 v5

QUEUED

127.0.0.1:6379> EXEC

(error) EXECABORT Transaction discarded because of previous errors.

127.0.0.1:6379> get k5

(nil)

4)冤頭債主

127.0.0.1:6379> MULTI

OK

127.0.0.1:6379> INCR k1

QUEUED

127.0.0.1:6379> set k2 22

QUEUED

127.0.0.1:6379> set k3 33

QUEUED

127.0.0.1:6379> set k4 v4

QUEUED

127.0.0.1:6379> get k4

QUEUED

127.0.0.1:6379> EXEC

1) (error) ERR value is not an integer or out of range

2) OK

3) OK

4) OK

5) "v4"

127.0.0.1:6379> get k4

"v4"

5)watch監控

(1)悲觀鎖

  悲觀鎖(Pessimistic Lock), 顧名思義,就是很悲觀,每次去拿數據的時候都認爲別人會修改,因此每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會block直到它拿到鎖。傳統的關係型數據庫裏邊就用到了不少這種鎖機制,好比行鎖,表鎖等,讀鎖,寫鎖等,都是在作操做以前先上鎖

[1]無加塞篡改,先監控再開啓multi

127.0.0.1:6379> set balance 100

OK

127.0.0.1:6379> set debt 0

OK

127.0.0.1:6379> keys *

1) "k2"

2) "k1"

3) "k4"

4) "balance"

5) "debt"

6) "k3"

127.0.0.1:6379> WATCH balance

OK

127.0.0.1:6379> MULTI

OK

127.0.0.1:6379> DECRBY balance 20

QUEUED

127.0.0.1:6379> INCRBY debt 20

QUEUED

127.0.0.1:6379> EXEC

1) (integer) 80

2) (integer) 20

[2]有加塞篡改

  監控了key,若是key被修改了,後面一個事務的執行失效

 

(2)樂觀鎖

  樂觀鎖(Optimistic Lock), 顧名思義,就是很樂觀,每次去拿數據的時候都認爲別人不會修改,因此不會上鎖,可是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,能夠使用版本號等機制。樂觀鎖適用於多讀的應用類型,這樣能夠提升吞吐量,

  樂觀鎖策略:提交版本必須大於記錄當前版本才能執行更新

 

(3)CAS(Check And Set)

6)總結

 

相關文章
相關標籤/搜索