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.

作者

付威

发布于

2019-04-27

更新于

2025-04-16

许可协议

You need to set install_url to use ShareThis. Please set it in _config.yml.

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×