Redis的常用淘汰策略以及演算法實現

2021-10-25 19:04:49 字數 2234 閱讀 2779

一、redis的記憶體配置

1,redis配置記憶體為多少合適?

預設:如果不設定最大記憶體大小或者設定最大記憶體大小為0,在64為作業系統下不限制記憶體大小,在32位作業系統下最多使用3gb記憶體。

極限情況:留出一倍記憶體。比如你的redis資料占用了8g記憶體,那麼你還需要再預留8g空閒記憶體。也就是記憶體需求是16g。記憶體佔用率低於50%是最安全的。

普通情況:正常情況下,在序列化週期內,不會更改所有資料,只會有部分資料更改,那麼,預留出可能產生的更改部分的空間,就行。如果實在要說乙個資料的話,一般推薦redis設定記憶體為最大物理記憶體的75%都是安全的。

2,如何修改記憶體

a)配置檔案修改

redis.conf中

#設定為100m,單位是byte

maxmemory 104857600

b)命令列修改

config set maxmemory 104857600
3,檢視最大記憶體

#或者使用

info memory

4,如果redis的記憶體你打滿了會怎麼樣?

二、redis的記憶體淘汰策略三、手寫lru演算法

1,採用linkedhashmap實現

public

class

demo015_lrucachelinkedhashmap};

}public

void

put(

int key,

int value)

public

intget

(int key)

}

2,自定義雙向鍊錶

獲取時,直接從hashmap中獲取。如果不存在直接返回-1,如果存在就刪除鍊錶尾部資料,更新鍊錶頭部資料為當前node

public

class

demo015_lrucache

public

node

(k key, v val)

}class

doublelinkednode

public

void

addhead

(node

node)

public

void

remove

(node

node)

node.prev.next = node.next;

node.next.prev = node.prev;

node.next = null;

node.prev = null;

}public node

getlast()

return tail.prev;}}

private

int capacity;

private hashmap

> hashmap;

private doublelinkednode

doublelinkednode;

public

demo015_lrucache

(int capacity)

public

intget

(int key)

doublelinkednode.

remove

(node)

; doublelinkednode.

addhead

(node)

;return node.val;

}public

void

put(

int key,

int value)

//新增頭結點

node =

newnode

<

>

(key, value)

; hashmap.

put(key,node)

; doublelinkednode.

addhead

(node);}

else

}}

Redis淘汰策略

將 redis 用作快取時,如果記憶體空間用滿,就會自動驅逐老的資料。maxmemory用於指定 redis 能使用的最大記憶體。既可以在redis.conf檔案中設定,也可以在執行過程中通過 config set 命令動態修改 當記憶體使用達到最大限制時,如果需要儲存新資料,根據配置的策略 pol...

redis 淘汰策略

lru least recently used 演算法,如果資料最近被訪問過,那麼將來被剛問的機率也是很高的。lfu lfu 如果資料過去被訪問多次,那麼將來被剛問的機率也是更高。過期策略 1惰性刪除,當key被訪問時檢查改key的過期時間,若已過期刪除,已過期未被訪問的資料保持在記憶體中,小號記憶...

redis 淘汰策略

redis 淘汰策略有哪些?1,volatile lru 從已設定過期時間的雜湊表 server.db i expires 中隨機挑選多個key,然後在選到的key中用lru演算法淘汰最近最少使用的資料 2,allkey lru 從所有key的雜湊表 server.db i dict 中隨機挑選多個...