Redis 中的事務

來源:互聯網
上載者:User

標籤:

Redis支援簡單的事務


Redis與mysql事務的對比



Mysql

Redis

開啟

starttransaction

muitl

語句

普通sql

普通命令

失敗

rollback復原

discard取消

成功

commit

exec


注:rollback與discard的區別

  • 如果已經成功執行了2條語句,第3條語句出錯.
  • Rollback後,前2條的語句影響消失.
  • Discard只是結束本次事務,前2條語句造成的影響仍然還在


注:

在mutil後面的語句中,語句出錯可能有2種情況

  1.  文法就有問題,

這種,exec時,報錯,所有語句得不到執行

        2.   文法本身沒錯,但適用對象有問題.比如zadd操作list對象

Exec之後,會執行正確的語句,並跳過有不適當的語句.

(如果zadd操作list這種事怎麼避免?這一點,由程式員負責)    需要程式員手動控制操作



思考:

我正在買票

Ticket-1 , money -100

而票只有1張,如果在我multi之後,和exec之前,票被別人買了---即ticket變成0了.

該如何觀察這種情景,並不再提交


悲觀的想法:

世界充滿危險,肯定有人和我搶,給ticket上鎖,只有我能操作.[悲觀鎖]


樂觀的想法:

沒有那麼人和我搶,因此,我只需要注意,

--有沒有人更改ticket的值就可以了[樂觀鎖]


Redis的事務中,啟用的是樂觀鎖,只負責監測key沒有被改動.


具體的命令---- watch命令

例:

redis 127.0.0.1:6379> watch ticketOKredis 127.0.0.1:6379> multiOKredis 127.0.0.1:6379> decr ticketQUEUEDredis 127.0.0.1:6379> decrby money 100QUEUEDredis 127.0.0.1:6379> exec(nil) // 返回nil,說明監視的ticket已經改變了,事務就取消了.redis 127.0.0.1:6379> get ticket"0"redis 127.0.0.1:6379> get money"200"

 


watchkey1 key2 ... keyN

作用:監聽key1key2..keyN有沒有變化,如果有變,則事務取消


unwatch

作用:取消所有watch監聽

Redis 中的事務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.