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取消监视,再重复之前的操作再开一个事务即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通