Redis实现乐观锁
悲观锁:当要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发。这种借助数据库锁机制,在修改数据之前先锁定,再修改的方式被称之为悲观并发控制。
悲观锁具有强烈的独占和排他特性。
乐观锁:乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。乐观锁适用于读操作多的场景,这样可以提高程序的吞吐量。
正常执行时:
127.0.0.1:6379> set money 1000 OK 127.0.0.1:6379> set pay 0 OK 127.0.0.1:6379> watch money OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> decrby money 200 QUEUED 127.0.0.1:6379> incrby pay 200 QUEUED 127.0.0.1:6379> exec 1) (integer) 800 2) (integer) 200
开启两个窗口测试实现乐观锁