1. 程式人生 > >Redis筆記八之內存設置及優化

Redis筆記八之內存設置及優化

慢日誌 虛擬內存 極限 led 執行時間 需要 那種 tis ace

理論上講redis可以存儲2的32次方個key,每個實例至少存2億5千萬個key,但因為Redis是基於內存的數據庫所以也就意味著它不可能存儲特別多的數據,應該說redis的存儲極限是系統的可用內存。

我在本機上通過jedis生成100萬個key實際占用內存108M

# Memory

used_memory:104730792

used_memory_human:99.88M

used_memory_rss:123080704

used_memory_peak:113668232

used_memory_peak_human:108.40M

used_memory_lua:35840

mem_fragmentation_ratio:1.18

mem_allocator:jemalloc-3.6.0

# Keyspace

db0:keys=1000000,expires=0,avg_ttl=0

內存設置

maxmemory和maxmemory_policy參數

在redis.conf中通過這兩個參數配置redis的內存使用情況。Redis的可用內存與系統的內存有關,一般我們需要設置它的最大可用內存,除非你確定你的業務中redis的內存不會很大且有足夠的系統內存。

maxmemory參數

不設置

1:不設置或為0,64位系統不限制使用,32位最多使用3G

2:如果不設置最大內存系統有多少內存redis就會用多少一旦開始寫入swap虛擬內存則後期查詢速度反而會慢。

設置

如果開啟了RDB持久化方式,因為子進程在復制所有數據時內存使用量會增加一倍,所以最大設置為系統內存的45%。如果沒有開啟最大設置為系統內存的95%。

maxmemory_policy參數

1:設置最大內存後需要設置刪除策略否則當內存不足時再添加數據就會報錯。

2:有六種刪除策略。

volatile-lru:使用LRU算法從已設置過期時間的數據集合中淘汰數據。

volatile-ttl:從已設置過期時間的數據集合中挑選即將過期的數據淘汰。

volatile-random:從已設置過期時間的數據集合中隨機挑選數據淘汰。

allkeys-lru:使用LRU算法從所有數據集合中淘汰數據,淘汰使用頻率最少的key。

allkeys-random:從數據集合中任意選擇數據淘汰

no-enviction:禁止淘汰數據。


優化原則:

1:key的名稱盡量使用簡單明了的關鍵字,比如stu代表學生不要太長。

2:如果只是使用redis充當緩存就請關閉持久化功能。

3:redis為每種數據類型都提供了兩種內部編碼方式,生成時redis自己會自動根據數據類型調整使用那種編碼方式。

4:slowlog慢日誌查詢

當我們發現redis命令執行慢時可以通過slowlog來找出這些命令。在redis.conf中有兩個參數slowlog-log-slower-than10000和slowlog-max-len 128。

slowlog-log-slower-than10000表示當命令執行時間大於10000時此命令會被保存

slowlog-max-len128表示redis會保存最多128條命令。

slowlog get可以查看當前所有執行慢的命令

slowlog len可以查看目前一共記錄了多少條命令

slowlog reset可以執行重置

我們可以根據項目的實際情況修改redis.conf中的這兩個參數

Redis筆記八之內存設置及優化