版權聲明:本文為博主原創文章,未經博主允許不得轉載。
### 內存淘汰
Redis內存不足時,有兩種處理方式:
(1)啟用虛擬內存:將vm-enabled設置為yes
(2)啟用內存淘汰:將maxmemory設置為一個大于0的整數
redis的使用內存大于最大分配可用內存時,開始進行淘汰,memcache只有LRU算法,redis有
1 隨機淘汰:從數據庫隨機刪除一個key
2 LRU算法:刪除一個最近最少訪問的key
3 TTL淘汰:刪除最快過期的key
### 對象引用計數器
為了防止一個客戶端調用get的同時,另一個client調用del刪除key而導致的內存端錯誤,redis使用了內存引用計數器:給對象添加一個引用計數器,有新的引用時,計數+1 ,引用失效,計數器-1 ,引用計數為0時,redis把key刪除,對象初始化時,引用計數為1 get時,引用+1 del時,引用-1
eg:實例化refcount=1
get refcount=2
del refcount=1
get結束 refcount=1,此時可以被刪除
### 自動關閉超時連接
server.idletime是設置的timeout的時間,timeout=0時,自動關閉不會觸發
當連接建立,卻不做任何操作時,超過timeout會自動斷開連接,當使用連接池時,不用配置timeout的時間,否則連接池里的連接會因超時而斷開
### redis清除過期數據
redis為每個存儲的數據設置一個過期時間,超過這個時間,redis把過期數據刪除,redis刪除數據分兩個階段
(1)在定時器serverCron中進行,每隔100ms執行一次
activeExpireCycle隨機獲取一些key,如果當前時間>數據設置的過期時間,刪除key,如果這些key有25%的數據過期,清理過程會繼續進行,以釋放更多的內存
(2)在用戶get時,如果key的expiretime<time(),刪除數據
新聞熱點
疑難解答