RedisTemplate的踩坑现场

文章讲述了在使用RedisTemplate时遇到的一个线上性能问题,问题源自于RedisTemplate在设置毫秒级超时时会使用PSETEX命令,这间接导致了大量的CLUSTER NODES命令发送,影响了Redis集群的性能。通过代码分析,找到了问题根源并提出了解决方案,即修改设置缓存过期时间的单位为秒,以避免PSETEX命令的使用。最后,作者对问题进行了总结和反思,强调了接口设计的重要性,并提出了后续的优化措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

张伟帆(网易严选技术团队)

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号下午对于商详的单压

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值