面試官:Redis 內存數據滿了,會宕機嗎?

背景

Redis 數據庫內存數據滿了,會宕機嗎?答案是:不會讓它出現存滿的狀況,在使用Redis的時候咱們要配置Redis能使用的最大的內存大小,存到必定容量的時候還有Redis的內存淘汰策略呢,還有LRU算法進行淘汰,等等。redis

Redis的內存淘汰策略

一、Redis佔用內存大小

咱們知道Redis是基於內存的key-value數據庫,由於系統的內存大小有限,因此咱們在使用Redis的時候能夠配置Redis能使用的最大的內存大小。算法

經過配置文件配置

經過在Redis安裝目錄下面的redis.conf配置文件中添加如下配置設置內存大小數據庫

 

 

經過命令修改

Redis支持運行時經過命令動態修改內存大小dom

 

 

若是不設置最大內存大小或者設置最大內存大小爲0,在64位操做系統下不限制內存大小,在32位操做系統下最多使用3GB內存

Redis的內存淘汰

既然能夠設置Redis最大佔用內存大小,那麼配置的內存就有用完的時候。那在內存用完的時候,還繼續往Redis裏面添加數據不就沒內存可用了嗎?編輯器

實際上Redis定義了幾種策略用來處理這種狀況:操作系統

noeviction(默認策略):對於寫請求再也不提供服務,直接返回錯誤(DEL請求和部分特殊請求除外)3d

allkeys-lru:從全部key中使用LRU算法進行淘汰blog

volatile-lru:從設置了過時時間的key中使用LRU算法進行淘汰內存

allkeys-random:從全部key中隨機淘汰數據get

volatile-random:從設置了過時時間的key中隨機淘汰

volatile-ttl:在設置了過時時間的key中,根據key的過時時間進行淘汰,越早過時的越優先被淘汰

當使用volatile-lru、volatile-random、volatile-ttl這三種策略時,若是沒有key能夠被淘汰,則和noeviction同樣返回錯誤

如何獲取及設置內存淘汰策略

獲取當前內存淘汰策略:

127.0.0.1:6379> config get maxmemory-policy

經過配置文件設置淘汰策略(修改redis.conf文件):

maxmemory-policy allkeys-lru

經過命令修改淘汰策略:

127.0.0.1:6379> config set maxmemory-policy allkeys-lru`

相關文章
相關標籤/搜索