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,看下打印结果:

Redis

我们发现,在缓存过期的时候,缓存中的值有重新从0 开始计算,而且过期时间大于5秒。

原因是因为:Redis Incr 命令将 key 中储存的数字值增一,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作,且将key的有效时间设置为长期有效。

所以 ,即使key已经过期,incr方法会重新生成一个永久性的key.