luv.preet Asked: 2017-03-31 12:40:47 +0800 CST2017-03-31 12:40:47 +0800 CST 2017-03-31 12:40:47 +0800 CST redis 使用所有分配的内存会发生什么? 772 我对redis很陌生,尝试学习和探索redis的结构和体系结构。 在 2.4 版本之前,redis 中有虚拟内存选项可用,通过它可以将较少使用的值交换到磁盘,并在需要时从磁盘交换。只有热点数据(经常使用)保存在主内存中。 但是现在由于没有像虚拟内存这样的选项,当分配给它的最大空间被完全填满时,redis如何处理? 它如何使用哪种算法/过程从主内存中删除数据?我们可以不使用虚拟内存将很少使用的数据写入磁盘吗? nosql redis 1 个回答 Voted Best Answer Itamar Haber 2017-03-31T17:26:02+08:002017-03-31T17:26:02+08:00 Redis 遵守maxmemory配置指令。当设置为 0(默认值)时,Redis 将尝试根据需要分配尽可能多的内存。一旦完成,操作系统将杀死它。 设置maxmemory为任何正值都会限制 Redis 为数据消耗的 RAM 量。当达到限制时,Redis 的行为将取决于maxmemory-policy配置设置。以下内容取自默认redis.conf文件并详细说明了不同的驱逐政策: volatile-lru -> 在设置过期的键中使用近似的 LRU 逐出。 allkeys-lru -> 使用近似 LRU 逐出任何键。 volatile-lfu -> 在设置过期的键中使用近似的 LFU 逐出。 allkeys-lfu -> 使用近似 LFU 逐出任何键。 volatile-random -> 从设置过期的密钥中删除一个随机密钥。 allkeys-random -> 删除随机密钥,任何密钥。 volatile-ttl -> 删除具有最近过期时间(次要 TTL)的 密钥 noeviction -> 不驱逐任何东西,只在写入操作时返回错误。
Redis 遵守
maxmemory
配置指令。当设置为 0(默认值)时,Redis 将尝试根据需要分配尽可能多的内存。一旦完成,操作系统将杀死它。设置
maxmemory
为任何正值都会限制 Redis 为数据消耗的 RAM 量。当达到限制时,Redis 的行为将取决于maxmemory-policy
配置设置。以下内容取自默认redis.conf
文件并详细说明了不同的驱逐政策: