Redis (六 深入了解redis核心)

2021-07-24 09:02:01 字數 965 閱讀 5094

### 記憶體淘汰

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

redis深入了解(一)

redis的常見問題 1.redis是記憶體版資料庫,如果記憶體滿了怎麼辦?2.redis是否是執行緒安全的資料庫 redis 是 執行緒安全 redis是乙個開源,先進的 key value 儲存,並用於構建高效能,可擴充套件的web應用程式的完美解決方案,是 執行緒安全 的。redis三個主要特...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...

深入了解A

一 前言 在這裡我將對a 演算法的實際應用進行一定的 並且舉乙個有關a 演算法在最短路徑搜尋的例子。值得注意的是這裡並不對a 的基本的概念作介紹,如果你還對a 演算法不清楚的話,請看姊妹篇 初識a 演算法 這裡所舉的例子是參考amit主頁中的乙個源程式,使用這個源程式時,應該遵守一定的公約。二 a ...