1.在Redis安装目录下找到,打开它,找到下面一行:
最大内存配置项默认被注释掉了。使用默认的最大内存大小:在64位操作系统上,内存大小没有限制,在32位操作系统上,最多可以使用3GB。
2.在客户端命令行查看
这里的结果是0,说明没有手动指定最大内存,使用默认的最大内存。
一般建议Redis将内存设置为最大物理内存的四分之三。
1.在配置文件中指定maxmemory参数。例如最大内存为200MB,则在配置文件中添加maxmemory209751200;
2.使用configsetmaxmemory209751200命令进行设置。注意,这里通过命令行设置最大内存大小时,并没有在配置文件中添加maxmemory209751200这一行。
当Redis达到最大可用内存时,向其中存储数据会报告OOM。因此,为了避免无限数据存储导致的OOM,必须采用适当的存储淘汰策略。
在讨论Redis的内存淘汰策略之前,我们首先要对Redis中的过期键删除机制有一个大概的了解。事实上,过期键的删除策略有3种,Key的删除时机不同。
1.定时删除
所谓定时删除,就是在设置key的过期时间时创建一个定时器,让定时器在key的过期时间到来时立即删除该key。它可以立即删除过期的键,这样可以节省内存,但不会增加CPU的负担,因为需要管理计时器。
2.延迟删除
所谓延迟删除,就是对过期的key不管,而是每次检索到key后,检查获取到的key是否已经过期,删除该key。如果尚未过期,密钥将被退回。延迟删除对CPU友好,但由于过期key无法主动删除,因此会占用大量内存,当过期key大量积累时,对内存不友好。
3.定期删除
所谓定期删除是前两种删除策略的折衷。定期执行删除过期密钥的过程,并通过限制操作执行的持续时间和频率来减少删除对CPU时间的影响。
定期删除是指定期查询Redis数据库中的当前数据,采用随机抽取策略,利用过期数据的比例来控制删除频率。其特点是:
a)CPU利用率设置有峰值,检测频率可以调整。
b)内存压力有限,持续清理长期占用内存的冷数据。
综上所述,可以说,定期删除时,定期检查存储空间(随机检查,随机检查)。
周期性删除的难点在于确定执行输出操作的持续时间和频率。如果删除操作执行过于频繁或者执行时间过长,周期性删除策略就会退化为定时删除策略,导致删除key时消耗过多的CPU时间。如果删除操作太少或者执行时间太短,则常规删除策略与惰性删除策略相同,导致内存浪费。因此,必须相应地设置周期性删除策略的执行时长和频率。
定期删除在某种程度上是一种合理有效的删除过期密钥的策略。然而,由于执行时间和执行频率有限,必须有另一种机制(策略)来确保内存可以回收。因此,有必要采取记忆消除策略。
在中,注意到有以下8种内存淘汰策略:
le-lru:从固定过期时间淘汰的key中选择最近使用的数据;
s-lru:从所有要删除的键中选择最近最少使用的数据;
le-lfu:从设置过期的键中选择最不常用的数据进行删除
s-lfu:从所有key中选择使用频率最低的数据进行淘汰;
le-random:从key中选择所有有设定过期时间的数据进行淘汰;
被淘汰;
s-random:从所有key中随机选取数据进行淘汰。
le-ttl:从即将过期的key中选取数据,淘汰集合的过期时间为
-enviction:禁止删除数据,这也是默认策略。如果没有足够的内存来保存新数据,则新的写入操作会报告错误。
设置和查看内存处置策略
上一篇:redis默认内存
下一篇:redis内存满了会发生什么