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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM