Redis的垃圾回收機制(重點)
Redis自己也設計了一套垃圾回收方案。可以讓redis中的存儲空間得到優化。
1.什么情況下數據會成為垃圾
當redis中的key的生命時間到了,不會立即刪除,當碰到者兩種情況會被刪除
- 定期刪除:每隔100ms看3個key,如果被redis掃描到,那么就被刪除
- 惰性刪除:當key過期了,客戶端get了一次,redis發現該key已過期,於是刪除。
2.redis采用什么樣的回收策略
- volatile-lru:在內存不足時,Redis會再設置過了生存時間的key中干掉一個最近最少使用的key。
- allkeys-lru:在內存不足時,Redis會在全部的key中干掉一個最近最少使用的key。
- volatile-lfu:在內存不足時,Redis會再設置過了生存時間的key中干掉一個最近最少頻次使用的key。
- allkeys-lfu:在內存不足時,Redis會再全部的key中干掉一個最近最少頻次使用的key。
- volatile-random:在內存不足時,Redis會再設置過了生存時間的key中隨機干掉一個。
- allkeys-random:在內存不足時,Redis會再全部的key中隨機干掉一個。
- volatile-ttl:在內存不足時,Redis會再設置過了生存時間的key中干掉一個剩余生存時間最少的key。
- noeviction:(默認)在內存不足時,只讀不能寫。
建議使用:volatile-lru。這種是性能和安全之間最協調的。
3.redis具體怎么回收垃圾
redis會根據選擇的回收策略對待回收的key集合進行取樣,樣本的范圍大小決定了性能,
- 范圍越大:越精確,性能越差;
- 范圍越小:越不精確,性能越好。
maxmemory-samples 5 # 保持默認即可