Redis中的Incr函数的一个坑

付威     2019-04-27   558   1min  

首先看一段代码:


    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.

(本文完)

作者:付威

博客地址:http://blog.laofu.online

如果觉得对您有帮助,可以下方的RSS订阅,谢谢合作

如有任何知识产权、版权问题或理论错误,还请指正。

本文是付威的网络博客原创,自由转载-非商用-非衍生-保持署名,请遵循:创意共享3.0许可证

交流请加群113249828: 点击加群   或发我邮件 laofu_online@163.com

付威

获得最新的博主文章,请关注上方公众号