`
gao_xianglong
  • 浏览: 462168 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Redis事务失效问题记录

阅读更多

《Redis事务失效问题记录》

 

限时抢购场景下,热点数据的写操作如果是在RDBMS中进行,会造成多线程之间相互竞争InnoDB的行锁,并发越高等待的线程就会越多,这会导致RT上升,TPS下降,最终引起系统雪崩。因此将库存扣减动作放置Redis,使用乐观锁方式进行扣减,是一个不错的选择,毕竟Redis的吞吐量摆在那里,也没有行锁问题。

 

这段时间在对库存扣减进行二次优化(提成库存扣减成功率、减少同一时间watch碰撞概率),发现一个问题,直接在redis-cli使用watch+multi进行操作,居然会发生超卖现象,并且产生了很多诡异现象:

1、multi后,没有加入事务队列,直接被提交;

2、成功加入事务队列,但没有达到一致性;

3、...

 

这事有点大,赶紧review线上库存扣减逻辑代码,并核对秒杀订单是否存在超卖,但均正常,并且用jedis直接连接redis进行超卖测试,也并没有重现上述这个问题,这就有点诡异了。review了一段时间,后来将问题定位到redis的timeout上

 

Redis的事物队列是存放在客户端的。简单说,超时后,会话断开重建连接,上个会话的事务队列自然销毁了,所以才会出现这个诡异的情况,感觉事务失效。另外各个redis表现不同,因为不同业务的server超时不同,造成了烟雾弹。Server端的timeout就是“罪魁祸首”,之所以jedis压测没超卖,是因为操作停顿时间不会大于server的超时时间,就不会被redis认为空闲连接释放。

 

 

当然如果redis的timeout是0,永不超时,则意味着客户端事务队列永不过期,当然,这是不合理的哈。

分享到:
评论

相关推荐

    springboot-redis事务

    springboot-redis事务

    redis事务回滚工具

    基于SpringBoot的轻量级redis事务回滚机制,使用栈和ThreadLocal记录业务链的redis操作,发生异常进行回滚,参考了阿里巴巴Seata AT模式的db回滚策略:补偿回滚,记录前镜像与当前操作语句,反向解析生成补偿动作。...

    记录redisson实现redis分布式事务锁

    自己封装redisson方法,同时通过注解的方式加入redis分布式事务锁,可靠。

    Redis6.x专项进阶课(解决Redis工作实际问题).rar

    分享视频教程——Redis6.x专项进阶课(解决Redis工作实际问题),2020年11月录制,附源码;本课程以一个实战项目为主线,整合Redis各种问题场景,不断改造项目,以问带学。学完本课后,面对Redis相关问题,你将能够...

    redis事务与关系型数据库事务比较

    文档列举了redis环境的事务与关系型数据库的事务的区别

    redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用

    基于北京尚硅谷周阳老师讲解的redis。个人学习总结: 包含redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用。

    Redis思维导图分布式缓存-基于Redis集群解决单机Redis存在的问题

    分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。...

    redis 的并发竞争问题是什么?如何解决这个问题?了解 redis 事务的 CAS 方案吗?

    redis 的并发竞争问题是什么?如何解决这个问题?了解 redis 事务的 CAS 方案吗?

    Redis事务的使用

    一、Redis事务简介 Redis事务可以一次执行多个命令,一个事务的所有命令都会序列化并按顺序地串行化执行,而不会被其他客户端提交的命令请求插入到事务执行命令序列中。 二、Redis事务命令 下面的表格节选自:...

    cpp-Redis分布式事务

    在大型游戏中经常使用分布式,分布式中因为游戏逻辑会经常游戏事务,借助redis某些特性我们可以实现分布式锁和分布式事务。

    解决Redis设置密码重启后失效的问题

    今天小编就为大家分享一篇解决Redis设置密码重启后失效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    redis事务.pdf

    Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行...

    Redis 事务(上).flv

    Redis 事务(上).flv

    Redis之Redis事务

    本文主要介绍了Redis事务的概念、Redis不保证原子性、Redis事务的三个阶段、Redis事务相关命令以及Redis事务使用案例。 本文来自于博客园,由火龙果软件Anna编辑、推荐。Redis事务的本质是一组命令的集合。事务支持...

    Redis学习笔记—Redis事务

    Redis事务可以一次执行多个命令(按顺序地串行执行,执行中不会被其他命令插入,不许加塞) 1.简介 Redis事务可以一次执行多个命令(允许在一次单独的步骤中执行一组命令)。 特征: [1]批量操作在发送EXEC命令前被放入...

    redis.md redis的笔记记录

    redis.md redis的笔记记录

    redis事务常用操作详解

    MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务相关的命令。事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程...

    剖析!Redis事务实现原理

    在Redis中实现事务主要依靠以下几个命令来实现:Redis事务从开始到结束通常会通过三个阶段:1.事务开始2.命令入队3.事务执行以下是一个最简单的Redis事务流程:第一步跟其他的关系型数据库类似,也是需要开启一个事务...

    08-Redis HyperLogLog与事务和Redis 7.0那点事-ev.rar

    08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar08-Redis HyperLogLog与事务和Redis 7.0那点事_ev.rar...

Global site tag (gtag.js) - Google Analytics