使用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),池中的数据按照访问时间排序,小于池中时间最短的就会插入到池中,直到候选池满为止。当垂直前端为full,如果有新的key要插入,则最后访问时间最大(最近访问过)的key会从池中移除
需要删除时,只需选择带有的key即可。
LFU算法是Redis4.0中新增的删除策略,它的全称是LeastFrequentlyUsed,其核心思想是根据key进行删除。最近被访问的频率。
LFU算法可以更好地表示正在访问的密钥,如果使用LRU算法并且该密钥长时间没有被访问,那么它被认为是热点数据,并且会被认为是热点数据。不会被删除,并且某些键将来可能会被删除而被访问。如果使用LFU算法就不会出现这种情况,因为使用一次不会使关键数据成为热数据。
LFU有两种策略:
参考文档:面试官:如果Redis内存满了数据,会崩溃吗?
封面图片来源:
上一篇:redis查看内存大小
下一篇:redis查看内存大小命令