Redis與mysql事務的對比:
????????Mysql:
????????開啟:start transaction? ? ? ? 語句:普通sql? ? ? ? 失斝炭谩:rollback(回滾)? ? ? ? 成功:commit
? ??? ? Redis:
????????開啟:muitl? ? ? ? ? ? ? ? ? ? ? ? 語句:普通命令? ? ? ? 失敗:discard(取消)? ? ? ? 成功:exec
rollback與discard 的區(qū)別:
????????如果已經(jīng)成功執(zhí)行了2條語句, 第3條語句出錯。Rollback后,前2條的語句影響消失江滨。Discard只是結(jié)束本次事務,前2條語句造成的影響仍然還在
redis事物中的樂觀鎖(watch監(jiān)聽):
????????比如說用戶正在買票? Ticket -1 , money -100 。 而票只有1張, 如果在用戶multi之后,和exec之前, 票被別人買了---即ticket變成0了。應該如何觀察這種情景,并不再提交?
悲觀鎖:
????????世界充滿危險,肯定有人和我搶, 給 ticket上鎖, 只有我能操作. [悲觀鎖]
樂觀鎖:
????????沒有那么人和我搶,因此,我只需要注意有沒有人更改ticket的值就可以了
????????Redis的事務中,啟用的是樂觀鎖,只負責監(jiān)聽key沒有被改動.
watch key1 key2 ?... keyN
????????作用:監(jiān)聽key1 key2..keyN有沒有變化,如果有變, 則事務取消
unwatch
????????作用:取消所有watch監(jiān)聽