记录一行代码导致线上redis崩溃

238 阅读1分钟

在使用redisTemplate的时候,一定要注意以下两个方法的区别:

// 第三个参数不是时间,是offset。底层实现是setRange。

redisTemplate.opsForValue().set(tradeNo, "1", 100L);

image.png

// 正常的set方法。

image.png redisTemplate.opsForValue().set(tradeNo, "1");

image.png redisTemplate.opsForValue().set(tradeNo, "1", 100L, TimeUnit.SECONDS);

而setRange命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始

例如说这个是正常的set

image.png

image.png

正常的set方法占用了11bytes,

image.png

image.png

而用上了setRange之后占用了9.77kb,且没有过期时间,只能慢慢的把redis撑爆。