Redis高并发锁(二)乐观锁
创始人
2024-04-26 01:46:17
0

文章目录

  • redis乐观锁
    • 1. watch 监控key
    • 2. multi 开启事务
    • 3. exec 执行事务
    • 4. 演示
      • 1) 先用两个连接AB访问redis
      • 2) A监控key,此时库存是4501
      • 3) A开启事务,并且将库存-1,事务进入队列等待执行
      • 4)此时B更新库存为2001
      • 5)A开始执行事务
  • 业务改造
    • 1. StockService
  • 测试
  • 问题

redis乐观锁

由watch multi exec配合实现乐观锁

1. watch 监控key

可以监控一个或者多个key的值,若在事务执行(exec)之前,key的值发生变化则取消事务执行

2. multi 开启事务

3. exec 执行事务

4. 演示

1) 先用两个连接AB访问redis

2) A监控key,此时库存是4501

在这里插入图片描述

3) A开启事务,并且将库存-1,事务进入队列等待执行

在这里插入图片描述

4)此时B更新库存为2001

在这里插入图片描述

5)A开始执行事务

在这里插入图片描述

执行为空,即执行失败,且库存已被B更新为了2001

6)若事务执行过程中没有被B执行呢
在这里插入图片描述
执行成功!!!

业务改造

1. StockService

@Service
public class StockService {@Autowiredprivate StockMapper stockMapper;@Autowiredprivate StringRedisTemplate redisTemplate;public void deduct() {redisTemplate.execute(new SessionCallback() {@Overridepublic  Object execute(RedisOperations redisOperations) throws DataAccessException {// watch 监控keyredisOperations.watch((K) "stock");// 1。 查询库存String stockStr = redisTemplate.opsForValue().get("stock");if (!StringUtil.isNullOrEmpty(stockStr)) {int stock = Integer.parseInt(stockStr);// 2。 判断条件是否满足if (stock > 0) {// multi 开启事务redisOperations.multi();// 3 更新redisredisTemplate.opsForValue().set("stock", String.valueOf(stock - 1));// exec 执行事务List list = redisOperations.exec();// 如果执行事务返回结果为空,则重试if (CollectionUtils.isEmpty(list)) {try {Thread.sleep(20);} catch (InterruptedException e) {throw new RuntimeException(e);}deduct();}}}return null;}});}
}
 

需要在redisTemplate.execute(new SessionCallback() {})的匿名内部类中实现redis事务。

而RedisOperations
在这里插入图片描述
其实就是我们使用的StringRedisTemplate,所以直接用它调用即可。

测试

在这里插入图片描述
性能太差了,吞吐量只有6

在这里插入图片描述
但库存成功清0了,问题解决

问题

性能太差

相关内容

热门资讯

安卓系统通知管理,全面解析与优... 你有没有发现,手机里的通知就像是一群调皮的小精灵,时不时地跳出来和你互动?没错,说的就是安卓系统的通...
安卓系统手机哪买,揭秘哪里购买... 你有没有想过,拥有一部安卓系统手机是多么酷的事情呢?想象你可以自由安装各种应用,不受限制地探索各种功...
安卓系统 ipv4,基于安卓系... 你知道吗?在智能手机的世界里,有一个系统可是无人不知、无人不晓,那就是安卓系统。而在这个庞大的安卓家...
目前安卓是什么系统,探索安卓系... 亲爱的读者,你是否曾好奇过,如今安卓系统究竟是什么模样?在这个科技飞速发展的时代,操作系统如同人体的...
安卓6.0系统比5.0,从5.... 你有没有发现,自从手机更新了安卓6.0系统,感觉整个人都清爽了不少呢?没错,今天咱们就来聊聊这个话题...
安卓2.36系统升级,功能革新... 你知道吗?最近安卓系统又来了一次大变身,那就是安卓2.36系统升级!这可不是一个小打小闹的更新,而是...
安卓系统源码怎么打开,并可能需... 你有没有想过,安卓系统的源码就像是一扇神秘的门,隐藏着无数的技术秘密?想要打开这扇门,你得掌握一些小...
安卓8.0系统体验视频,智能革... 你有没有听说安卓8.0系统最近可是火得一塌糊涂啊!作为一个紧跟科技潮流的数码达人,我当然要来给你好好...
宣传系统漫画app安卓,探索安... 亲爱的读者们,你是否曾在某个午后,百无聊赖地打开手机,想要寻找一些轻松愉悦的读物?今天,我要给你介绍...
鸿蒙替换安卓系统吗,开启智能生... 你知道吗?最近科技圈里可是炸开了锅,因为华为的新操作系统鸿蒙系统,据说要大举进军手机市场,替换掉安卓...
手机安卓系统深度清理,解锁手机... 手机里的东西是不是越来越多,感觉就像一个装满了杂物的储物柜?别急,今天就来教你一招——手机安卓系统深...
安卓上的windows系统,融... 你有没有想过,在安卓手机上也能体验到Windows系统的魅力呢?没错,这就是今天我要跟你分享的神奇故...
安卓系统焦点变化事件,Andr... 你知道吗?在安卓系统的世界里,最近发生了一件超级有趣的事情——焦点变化事件。这可不是什么小打小闹,它...
一加系统安卓降级,轻松还原经典... 你有没有想过,你的手机系统升级后,突然发现某些功能变得不那么顺心了?别急,今天就来聊聊一加系统安卓降...
日本最好的安卓系统,体验非凡 亲爱的读者们,你是否曾想过,在遥远的东方,有一个国家,他们的智能手机系统独具特色,让人眼前一亮?没错...
荣耀安卓11 系统证书,保障安... 你知道吗?最近手机圈里可是炸开了锅,荣耀安卓11系统证书成了大家热议的话题。这不,我就迫不及待地来和...
安卓手机开机升级系统,体验流畅... 你有没有发现,每次你的安卓手机开机,总会有那么一刹那,屏幕上跳出一个升级系统的提示?是不是觉得这就像...
真正的安卓系统手机,安卓系统手... 你有没有想过,为什么有些人对安卓系统手机情有独钟?是不是觉得市面上的安卓手机千篇一律,缺乏个性?别急...
安卓怎么用定位系统,轻松实现精... 你有没有想过,手机里的定位系统竟然这么神奇?它不仅能帮你找到回家的路,还能在茫茫人海中找到你的好友。...
安卓的哪个系统流畅,探索新一代... 你有没有想过,为什么你的安卓手机有时候像蜗牛一样慢吞吞的,而别人的手机却像风一样快?今天,就让我带你...