《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,永不超时,则意味着客户端事务队列永不过期,当然,这是不合理的哈。
相关推荐
Redis可以配置为在键的操作发生时发送通知,这对构建缓存失效机制或监控系统很有用。 12. **Redis Cluster如何实现分布式?** Redis Cluster是一种分布式的解决方案,支持数据自动分片和故障转移。每个节点存储...
redis可以说是半支持事务(假事务),提供了一些在一定程度上支持线程安全和事务的命令。例如:multi/exec watch inc等。但是redis的事务并不支持回滚,即可以两个命令可以同时提交执行,但是如果有失败,成功的也...
3. **事务处理**:Redis支持事务,可以一次性执行多个操作,确保操作的原子性,即事务中的所有命令都会被依次执行,不会被其他命令插队。 4. **主从复制**:Redis支持主从复制,可以创建多个副本节点,提高数据可用...
以下是对Redis常见面试问题的详细解答: **1. Redis的基本概念** Redis是Remote Dictionary Server(远程字典服务器)的缩写,它是一个开源的、基于内存的数据结构存储系统。Redis支持多种数据结构,如字符串、哈希...
4. **事务**:Redis的事务功能允许用户一次性执行多条命令,确保原子性。 5. **发布/订阅**:Redis的发布/订阅(Pub/Sub)模型提供了一种基于消息的通信机制,允许发送者(Publisher)广播消息到多个接收者...
Watch 机制是 Redis 的一种乐观锁机制,当一个客户端监视某个键时,如果该键被其他客户端修改了,那么当前客户端的监视将失效,需要重新监视。 使用 Watch 机制实现秒杀抢购 在秒杀抢购场景中,我们可以使用 Watch...
Redis支持事务,用户可以一次发送多条命令,保证命令的原子性。通过`MULTI`、`EXEC`命令开始和结束一个事务,中间的命令会按顺序执行,即使有错误,也会全部执行或全部不执行。 4. **主从复制** Redis提供主从...
4. **事务(Transactions)**:Redis支持原子的多条命令执行,确保操作的完整性。 5. **发布/订阅(Pub/Sub)**:实现简单的消息传递,可用于构建实时消息系统或事件驱动架构。 6. **主从复制**:通过复制,可以...
在实际项目中,不断实践和探索,你会发现Redis在解决许多实时数据问题时,都能提供高效的解决方案。在阅读《Redis入门指南(第2版)》这本书中,你将获得更详尽的解释和实例,助你在Redis的世界中游刃有余。
如何监控和诊断 Redis 的性能问题?你平时使用哪些工具来进行 Redis 性能监控? - **监控工具**: - `redis-cli`:官方命令行工具,可用于监控和管理Redis。 - `Redis Insight`:图形化界面工具,方便查看Redis...
5. 事务(Transactions):Redis支持事务,允许一次性执行多条命令,确保原子性。在3.0.5版本中,事务的执行性能可能得到了提升。 6. 持久化:为了防止数据丢失,Redis提供了两种持久化方式:RDB(快照)和AOF...
- **事务**:Redis支持事务操作,保证了一组操作的原子性。 6. **Memcache与Redis的区别** - **数据结构**:Memcached只支持字符串类型,而Redis支持多种数据结构。 - **持久化**:Memcached不支持数据的持久化...
可以配置Redis发送键空间事件通知,如键的增删改查,便于实现缓存失效、监控等功能。 8. **内存管理** Redis采用内存优化策略,如LRU(Least Recently Used)和LFU(Least Frequently Used)淘汰策略,当内存达到...
六、Redis事务与发布订阅 1. 事务(Transaction):`MULTI`、`EXEC`命令组合多条操作,确保原子性。 2. 发布订阅(Publish/Subscribe):允许消息在频道间广播,实现异步通信。 七、Redis Cluster Redis Cluster是...
通过以上内容的学习,我们可以深入了解Redis的基本原理、特点以及如何在实际项目中应用这些特性来解决具体问题。Redis的强大功能使其成为现代软件架构中不可或缺的一部分,特别是在需要高性能、低延迟和灵活数据管理...
3. 设置日志记录:确保`loglevel`和`logfile`选项正确配置,便于故障排查。 4. 数据持久化:可选择RDB(定期快照)或AOF(Append Only File)方式,确保数据安全。 5. 安全性:设置`requirepass`密码,限制未经授权...
4. **事务支持**:Redis提供了简单但强大的事务机制,允许用户一次性执行多条命令,保证命令的原子性。 5. **发布/订阅**:Redis的发布订阅功能允许客户端订阅特定的频道,当有其他客户端向该频道发布消息时,订阅...
5. **事务处理**:支持通过图形界面进行Redis的事务操作,如`MULTI`、`EXEC`命令的组合使用。 6. **数据导入导出**:可以将Redis中的数据导出为JSON或CSV格式,同时也能导入数据到Redis,便于数据迁移和备份恢复。 ...
5. **分布式协调**:在大型系统中,可能需要考虑分布式环境下的协调问题,例如使用Redis的`Redlock`算法实现分布式锁,确保在多个节点间的强一致性。 6. **限流与熔断**:为了避免瞬间高并发导致系统崩溃,可以引入...