英语培训学校网站建设多少钱,网站建设 腾,棋牌app开发软件,wordpress 搬家 插件1、悲观锁与乐观锁
乐观锁和悲观锁是一种程序设计思想#xff0c;而不是具体的代码。乐观锁和悲观锁应用的场景有很多#xff0c;在数据库和多线程等等都会用到。
悲观锁#xff1a;总是假设最坏的情况#xff0c;每次去拿数据的时候都认为别人会修改#xff0c;所以每次…1、悲观锁与乐观锁
乐观锁和悲观锁是一种程序设计思想而不是具体的代码。乐观锁和悲观锁应用的场景有很多在数据库和多线程等等都会用到。
悲观锁总是假设最坏的情况每次去拿数据的时候都认为别人会修改所以每次在拿数据的时候都会上锁这样别人想拿这个数据就会阻塞直到它拿到锁共享资源每次只给一个线程使用其它线程阻塞用完后再把资源转让给其它线程。乐观锁总是假设最好的情况每次去拿数据的时候都认为别人不会修改所以不会上锁但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。
2、Redis监视测试
正常情况执行成功
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 //监视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
1) (integer) 80
2) (integer) 20测试多线程修改只使用watch当作Redis的乐观锁操作:
127.0.0.1:6379 watch money //监视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 //执行之前另一个线程修改了我们的值这时候就会导致执行失败
nil
127.0.0.1:6379 unwatch money //先解锁
OK
127.0.0.1:6379 watch money //再次放置锁再次见识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