redis读取自增时候指定的key问题

首先,此文章是接了如下文章写的

Spring boot redis自增编号控制 踩坑

上面这个问题解决后,公司这边功能其实已经实现了,但是考虑到一种情况,因为我们这边号的生成就是根据上面的自增编号来的,而redis里的自增编号是可以设置过期时间的,我这边设置的过期时间是根据客户的营业时间来换算获取的,

而当中碰到一个问题,因为考虑到客户营业时间是由客户自己维护的,所以不得不考虑当他们在同一天里面,刚开始设置的是一个上午的,后来在过期时间已经到了,redis中的计时器已经被自动清除的情况下,所以我这边再做一个计数器,

但是它的期限是无限期。当有限计时器过期导致这边数据找不到的时候,则从无限计时器去过来数据,并把它的值作为增量保存回到有限计时器中。而当中碰到一个问题:

代码1:

 1 /**
 2      * 读取缓存
 3      *
 4      * @param key
 5      * @return
 6      */
 7     public Object get(final String key) {
 8         Object result = null;
 9         ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
10         result = operations.get(key);
11         return result;
12     }

代码2:

 1 /**
 2      * redis 自增
 3      * @param key
 4      * @param liveTime 毫秒数 这个计数器的有效存留时间
 5      * @param delta 自增量
 6      * @return
 7      */
 8     public Long incr(String key, long liveTime, long delta) {
 9         RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
10         Long increment = entityIdCounter.addAndGet(delta);
11 
12         if ((null == increment || increment.longValue() == 0) && liveTime > 0) {//初始设置过期时间
13             entityIdCounter.expire(liveTime, TimeUnit.MILLISECONDS);
14         }
15 
16         return increment;
17     }

我通过代码1,去获取代码2生成的数据,结果发现不管怎么获取,都是null

必须要使用如下代码才能获取到值,尴尬呀!!!

RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
entityIdCounter.get();
原文地址:https://www.cnblogs.com/Grace-is-enough/p/9235534.html