redistemplate set方法_RedisTemplate的踩坑现场

本文讲述了在使用RedisTemplate时遇到的set方法导致的集群异常,问题表现为大量`cluster`命令和`psetex`命令,影响性能。通过监控和代码分析,发现`psetex`与`cluster nodes`命令关联,由于Spring Data Redis的缓存过期时间设计,导致频繁触发`cluster nodes`更新。解决方案是将过期时间改为秒级,减少`psetex`使用,从而避免异常。改进后的验证表明问题得到解决。
摘要由CSDN通过智能技术生成

e6e1b2e1a625cf54dff3474973d0f011.png
张伟帆(网易严选技术团队)
RedisTemplate是Spring封装的一个最常用的redis数据访问工具类,功能强大,使用简洁。但在RedisTemplate看似简单的API下,也是暗流涌动,背后别有一番洞天。本文从一个线上性能问题入手,抽丝剥茧一步步探索RedisTemplate,挖出了RedisTemplate操作psetex命令的深坑。

一、背景

在之前的压测过程中,商详页面RT居高不下,发现yx_malltech_user这个redis集群的异常报警,起初是在业务没有开启分流读的情况下,一个Redis集群slave节点存在大量连接,占用大量CPU资源,且导致redis主从断掉等异常行为。

dba分析后发现,从数据库实时监控平台,可以看到有大量的cluster命令产生,且这个请求一直存在,只是压测流量过大,导致问题放大,单个cluster命令请求都是在30毫秒以上。都是打到随机一个NODE节点上,导致这个节点cpu飙升。

然后DBA开始相应的处理,包括但不限于单独隔离异常节点到独立机器上,配置参数优化等,问题没有根本解决。可以确定不是Redis服务端问题,应该是业务代码端问题,需要从业务用法开始排查使用方式,看是如何触发了大量的cluster命令。

6.9单压商详发现问题还是存在。开始我们的排查之路。

二、服务信息

  • 涉及服务:yanxuan-app
  • 涉及场景:商详
  • spring版本:4.0.8
  • spring-data-redis版本:1.8.4.RELEASE
  • jedis版本:2.9.0

三、分析过程

1. 监控观察

既然是cluster命令异常过多,我们观察下监控数据。 6.9号下午对于商详的单压

b20250b234e57171dfbc75765639a842.png

可以看到cluster命令确实过多,且

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值