日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的redis读取自增时候指定的key问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。