使用redis-cli登录RedisServer并执行info命令。'#Memory'部分是Redis内存的使用情况,例如:
这是在配置文件中:
Redis支持在运行时通过命令动态修改内存大小
由于Redis可以设置最大内存大小,所以配置的内存将会被用完。那么当内存耗尽的时候,我们继续往Redis中添加数据,不就没有内存可用了吗?
其实Redis定义了几种策略来处理这种情况:
一种是写在配置文件中:
另一种是使用命令
如上所述,当Redis可用的最大内存用完时,可以使用LRU算法来淘汰内存。那么什么是LRU算法呢?
近似LRU算法
Redis使用近似LRU算法,与常规LRU算法不太一样。近似LRU算法通过随机采样来消除数据,每次随机选择5个(默认)key,并消除最近最少使用的key。
为了实现近似LRU算法,Redis为每个key添加了一个额外的24位字段来存储该key最后一次被访问的时间。
Redis3.0中近似LRU的优化
Redis3.0对近似LRU算法做了一些优化。新算法将维护一个候选池(大小为16)。池中的数据按照访问时间排序。第一个随机选择的密钥将被放入池中。仅当访问时间小于池时,才会选择随后随机选择的每个密钥。最短时间将被放入池中,直到候选池满为止。当它满了的时候,如果有新的key需要放入,那么最后访问时间最长的(最近访问过的)就会从池中移除。
需要淘汰时,只需从池中选择最近访问时间最小的key(最长时间没有被访问过的key)并淘汰即可。
LFU算法是Redis4.0中新增的淘汰策略。它的全称是LeastFrequentlyUsed,其核心思想是根据最近访问的频率来淘汰键。首先淘汰很少访问的密钥,并保留访问较多的密钥。
LFU算法可以更好地表示被访问的密钥的流行度。如果使用LRU算法,某个key长期没有被访问过,只是偶尔被访问过,那么它就被认为是热数据,不会被淘汰,而且有些key以后很可能会被访问到。被淘汰了。如果使用LFU算法就不会出现这种情况,因为使用一次并不会让某个key成为热点数据。
LFU有两种策略:
参考文档:面试官:如果Redis内存满了,会崩溃吗?
封面图片来源:
上一篇:redis占多少内存
下一篇:redis内存