Redis实现乐观锁

一、什么是锁
锁一般是用于锁定一些公共的资源,防止由于高并发而出现“超库存”的情况(例如抢票、秒杀系统)
锁可以分为两种:

  • 乐观锁
    乐观锁认为无论什么时候都不会出现问题,所以不会上锁,只是在更新数据的时候,会去比对某个字段(版本号),查询在这期间是否有人操作过这个数据
  • 悲观锁
    悲观锁任务,无论什么时候都会出现问题,所以无论做什么操作都会上锁。上锁虽然保障了安全性,但是性能上会大打折扣
    二、Redis实现乐观锁
    Redis是通过watch的方式来实现乐观锁的
    示例:通过两个终端连接redis
    终端1:
127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> watch money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incrby money 20
QUEUED
127.0.0.1:6379> decrby consume 20
QUEUED

终端2:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby money 20
QUEUED
127.0.0.1:6379> exec

此时,终端1才提交事务

127.0.0.1:6379> exec  
(nil)  -- 执行失败

当执行失败的时候,先执行unwatch取消监视,再重复之前的操作再开一个事务即可

posted @ 2020-08-04 20:17  moutory  阅读(56)  评论(0编辑  收藏  举报  来源