redis刪除策略:惰性刪除,定時刪除,定期刪除。
惰性刪除:每次查詢的時候就檢測當前key是否過期,如果過期了就直接刪除,並返回null值;
- 缺點:每次只能刪除當前查詢的過期key,不查詢的key,過期了也不會被刪除,導致冗餘內存,長期長毛;
- 優點:自己捎帶幹了,不用請單獨線程來批量檢測刪除,導致搶奪cpu;
定期刪除:搞一個定時任務,每次去檢測是否有過期key,然後批量刪除;
- 缺點:搶佔cpu資源,每次檢測範圍太大,key越多耗時越久;
- 優點:刪除全面,不會佔用內存;
定期刪除:比如每個1小時,定時去檢測部分key進行刪除,多次迭代,必然幹掉所有;
- 缺點:不夠及時,但是可以調整頻率,時長來優化;
- 優點:不用粗暴搶奪cpu,也減少內存冗餘;
總結一句話:定時刪除,頻率太高,太粗暴,一般高併發設計沒人敢用,所以redis用了定期+惰性刪除,比較溫柔;