一、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 中隨機挑選多個...