当前位置:首页 > 内存 > 正文

redis内存占用查看

  • 内存
  • 2024-09-04 10:57:53
  • 2550

一、Redis内存满了会怎么样?1.通过配置文件进行配置

通过在配置文件中添加以下配置来设置Redis安装目录下的内存大小

可以是redis配置文件。它没有被使用。就是安装目录下的文件,启动redis服务时,通过命令修改redis配置文件。

Redis支持运行命令动态改变内存大小。

Redis最大内存大小由于可以配置,所以使用配置的内存。那么如果我们在Redis内存耗尽的时候不断的往里面添加数据,是不是就没有内存了呢?

其实Redis定义了几种方法来解决这种情况:

使用这三种方法时variable-lru、variable-random和variable-ttl,否则如果可以就将key移除,会返回和noeviction一样的错误

查找当前内存删除策略:

在配置文件中设置删除策略(修改文件):

通过命令改变删除策略:

估计LRU算法

Redis使用近似LRU算法,与普通LRU算法不太一样。近似LRU算法使用随机采样来删除数据,每次随机选择5个(默认)键,并删除最近使用的键。

maxmemory-samples参数中的样本数量:

示例:maxmemory-samples10

maxmemory-samples配置越大,越接近。淘汰的结果就是严格的LRU算法。

为了实现近似LRU算法,Redis为每个key添加了一个额外的24位字段来存储该key最后被访问的时间。

Redis3.0中优化近似LRU

Redis3.0对近似LRU算法做了一些改进。新算法使候选池(大小16)保持小于最短时间,直到候选池填满。当满时,如果有新的密钥需要输入,则最后到达时间最长(最近访问过)的密钥将从池中删除。

需要移除时,从池中选择最近访问时间最少的key(即长时间未访问过的key)并将其移除。


二、Redis内存配置和淘汰策略

1.在redis安装目录下找到,打开它,找到下面一行:

其中maxmemory是最大内存配置项。如果默认注释掉,则将使用默认最大值。内存大小:64位操作系统下内存大小没有限制,32位操作系统下最大可以使用3GB。

2.在客户端通过命令行显示

这里的结果是0,表示没有手动指定最大内存,使用默认的最大内存。

一般建议Redis将内存设置为最大物理内存的四分之三。

1.在配置文件中指定maxmemory参数,例如最大内存为200MB,则在配置文件中添加maxmemory209751200;
2.注意,这里如果通过命令行设置最大内存大小,则不会在配置文件中添加maxmemory209751200这一行。

当Redis达到最大可用内存时,存储数据时会报OOM。因此,为了避免无限数据存储导致的OOM,应该采用适当的内存处置策略。

在讨论Redis内存处置策略之前,我们首先要对Redis中的过期键删除机制有一个大概的了解;其实过期键的删除策略有3种,而过期键下:每种策略的删除时间是不同的。
1.定时删除
所谓定时删除就是在设置key过期时间的时候创建一个定时器,让定时器在达到key过期时间key的时候可以立即删除key的删除操作。钥匙到了。它可以立即删除过期的密钥,这对内存友好,但由于需要维护计时器,因此对CPU不友好。
2.懒惰删除
所谓懒惰删除,就是不去管过期的key,而是每次获取到key后,检查获取到的key是否已经过期,删除该key。。如果未过期,则返回密钥。惰性删除对CPU友好,但由于它不能主动删除过期的key,当过期的key大量积累时,会占用大量内存,不利于内存。
3.定期删除
所谓定期删除是前两种删除策略的折衷。删除过期key的操作会定期执行,通过限制操作的执行时长和频率,减少删除操作对CPU时间的影响。
定期删除会定期查询Redis数据库中的及时数据,采用随机抽取策略,利用过期数据的比例来控制删除频率。其特点是:
a)CPU使用率设置。峰值和检测频率可以定制。
b)内存压力有限,长期占用内存的冷数据会被不断清理。
综上所述,定期删除会定期检查存储空间(随机检查、抽查密钥)。
周期性删除的难点在于如何确定执行退出操作的时间和频率。如果删除操作执行过于频繁,或者执行时间过长,周期性删除策略就会退化为定时删除策略。删除策略,因此在删除键上消耗了太多的CPU时间。如果删除操作次数太少或者执行时间太短,常规删除策略就会和惰性删除策略一样,造成内存浪费。因此,应适当设置定期删除策略的执行时长和频率。
定期删除在某种程度上是删除过期键的合理且有效的策略,但由于其执行时间和执行频率的限制,必须有另一种机制(策略)来保证内存可以回收。因此有必要引入内存处置策略。

在中规定了以下八种垃圾处理策略:
le-lru:从key中选择最近最少使用的数据,并设置超时时间进行处理;
s-lru:选择所有key中最近最少使用的数据进行处理;
le-lfu:选择有设定过期时间的key中最不常用的数据进行处理其中。;
s-lfu:选择所有要淘汰的key中使用频率最低的数据;
le-random:选择设置了延迟过期的key的所有数据丢弃它们;
s-random:从所有密钥中随机选择要丢弃的数据
le-ttl:从设置超时的密钥中选择即将过期的数据进行删除;
-enviction:禁止数据驱逐,这也是默认策略。当内存不足以容纳新数据时,新的写操作将会报错。

设置并显示内存处置策略