Redis(十三):Redis实现乐观锁
生活随笔
收集整理的這篇文章主要介紹了
Redis(十三):Redis实现乐观锁
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、悲觀鎖與樂(lè)觀鎖
樂(lè)觀鎖和悲觀鎖是一種程序設(shè)計(jì)思想,而不是具體的代碼。樂(lè)觀鎖和悲觀鎖應(yīng)用的場(chǎng)景有很多,在數(shù)據(jù)庫(kù)和多線程等等都會(huì)用到。
- 悲觀鎖:總是假設(shè)最壞的情況,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會(huì)修改,所以每次在拿數(shù)據(jù)的時(shí)候都會(huì)上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會(huì)阻塞直到它拿到鎖(共享資源每次只給一個(gè)線程使用,其它線程阻塞,用完后再把資源轉(zhuǎn)讓給其它線程)。
- 樂(lè)觀鎖:總是假設(shè)最好的情況,每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會(huì)修改,所以不會(huì)上鎖,但是在更新的時(shí)候會(huì)判斷一下在此期間別人有沒(méi)有去更新這個(gè)數(shù)據(jù)。
2、Redis監(jiān)視測(cè)試
正常情況,執(zhí)行成功:
127.0.0.1:6379> set money 100 OK 127.0.0.1:6379> set out 0 OK 127.0.0.1:6379> watch money //監(jiān)視money對(duì)象 OK 127.0.0.1:6379> multi //事務(wù)正常結(jié)束,事務(wù)期間,沒(méi)有發(fā)生變動(dòng),這個(gè)時(shí)候就正常執(zhí)行成功 OK 127.0.0.1:6379> DECRBY money 20 QUEUED 127.0.0.1:6379> INCRBY out 20 QUEUED 127.0.0.1:6379> EXEC 1) (integer) 80 2) (integer) 20測(cè)試多線程修改只,使用watch當(dāng)作Redis的樂(lè)觀鎖操作:
127.0.0.1:6379> watch money //監(jiān)視money對(duì)象 OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> DECRBY money 20 QUEUED 127.0.0.1:6379> INCRBY out 20 QUEUED 127.0.0.1:6379> EXEC //執(zhí)行之前,另一個(gè)線程修改了我們的值,這時(shí)候就會(huì)導(dǎo)致執(zhí)行失敗! (nil) 127.0.0.1:6379> unwatch money //先解鎖 OK 127.0.0.1:6379> watch money //再次放置鎖,再次見(jiàn)識(shí)money最新值 OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> DECRBY money 20 QUEUED 127.0.0.1:6379> INCRBY out 20 QUEUED 127.0.0.1:6379> EXEC總結(jié)
以上是生活随笔為你收集整理的Redis(十三):Redis实现乐观锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JDK源码解析之 java.lang.C
- 下一篇: 定时删除脚本