Redis中的Incr函数的一个坑
首先看一段代码:
String key = "mytestKey";
RedisUtils.set(key, 0, 10);
for (int i = 0; i < 60; i++) {
String result=RedisUtils.get(key);
if(StringUtils.isEmpty(result)){
System.out.println("time end");
}
System.out.println(RedisUtils.incr(key));
SleepUtils.SleepSecond(1);
}
上面的代码向缓存充塞入了一个0,10s后过期,然后在循环中使用incr
方法对key对应的值进行加1,看下打印结果:
我们发现,在缓存过期的时候,缓存中的值有重新从0 开始计算,而且过期时间大于5秒。
原因是因为:Redis Incr 命令将 key 中储存的数字值增一,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作,且将key的有效时间设置为长期有效。
所以 ,即使key已经过期,incr
方法会重新生成一个永久性的key.