redis過期鍵刪除策略以及大key刪除方法


今天遇到了一個前同事挖的坑,刷新緩存中商品信息時先讓key過期,然后從數據庫里取最新數據然后再放到緩存中,他是這樣寫的

redisTemplate.expire(CacheConst.GOOGS_PREFIX,1,TimeUnit.MILLISECONDS);

設置key過期為一毫秒,導致緩存中有時沒有商品信息,因為在這一毫秒內有可能已經從數據庫中取到了最新數據,並且又放到了緩存中,一毫秒過后key過期了,緩存中就沒了商品信息。

正確的應該這樣寫redisTemplate.expire(CacheConst.GOOGS_PREFIX,-1,TimeUnit.MILLISECONDS)立馬讓key過期。

redis中對於有設置過期的key有三種處理方式

  1. 被動刪除:這個key下一次被訪問到的時候才會刪除。
  2. 主動刪除:Redis會定期主動淘汰一批已過期的key
  3. 當前已用內存超過maxmemory限定時,觸發主動清理策略

直接刪除大key是有風險的,key過大,直接刪除時會導致Redis阻塞,不同類型的大key有不同的刪除方式,

Large Hash Key 可使用hscan命令,每次獲取500個字段,再用hdel命令,每次刪除1個字段。

Large Set Key 可使用sscan命令,每次掃描集合中500個元素,再用srem命令每次刪除一個鍵。

Large List Key可通過ltrim命令每次刪除少量元素

Large Sorted Set Key使用sortedset自帶的zremrangebyrank命令,每次刪除top 100個元素


免責聲明!

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



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