在使用redisTemplate的时候,一定要注意以下两个方法的区别:
// 第三个参数不是时间,是offset。底层实现是setRange。
redisTemplate.opsForValue().set(tradeNo, "1", 100L);
// 正常的set方法。
redisTemplate.opsForValue().set(tradeNo, "1");
redisTemplate.opsForValue().set(tradeNo, "1", 100L, TimeUnit.SECONDS);
而setRange命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始
例如说这个是正常的set
正常的set方法占用了11bytes,
而用上了setRange之后占用了9.77kb,且没有过期时间,只能慢慢的把redis撑爆。