查緩存時間過期設多長
Ⅰ Redis緩存過期機制
一、針對與設置了過期時間的key值
1.(主動)定期刪除:定時隨機的檢查過期的key,如果過期則清理刪除
redis.conf(每秒檢查的次數1-500)配置: hz 10
2.(被動)惰性刪除:當客戶端請求到一個已經過期的key時,redis會檢查是否過期並刪除
所以,雖然key過期了,但是沒被清理的話,還是會占內存的。
二、內存淘汰管理機制Memory Management
當內存占滿之後,redis提供緩存淘汰機制。
redis.conf: maxmemory <bytes>
* noeviction:舊緩存永不過期,新緩存設置不了,返回錯誤
* allkeys-lru:清除最少用的舊緩存,然後保存新的緩存(推薦使用)
* allkeys-random:在所有的緩存中隨機刪除(不推薦)
* volatile-lru:在那些設置了expire過期時間的緩存中,清除最少用的舊緩存,然後保存新的緩存
* volatile-random:在那些設置了expire過期時間的緩存中,隨機刪除緩存
* volatile-ttl:在那些設置了expire過期時間的緩存中,刪除即將過期的
Ⅱ 緩存擊穿互斥鎖 設置鎖的失效時間
設置鎖的失效時間是自己設置的,它的過期時間會很短,最長不超過五分鍾
緩存穿透是指查詢一個一定不存在的數據
由於緩存是不命中時被動寫的,
並且出於容錯考慮,如果從存儲層查不到數據則不寫入緩存,
這將導致這個不存在的數據每次請求都要到存儲層去查詢,失去了緩存的意義。
在流量大時,可能DB就掛掉了,
要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。
最常見的則是採用布隆過濾器
將所有可能存在的數據哈希到一個足夠大的bitmap中,
一個一定不存在的數據會被 這個bitmap攔截掉,
從而避免了對底層存儲系統的查詢壓力。
另外也有一個更為簡單粗暴的方法
如果一個查詢返回的數據為空(不管是數 據不存在,還是系統故障),
我們仍然把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鍾