Redis内存满了怎么办?答案是利用内存淘汰机制
如果过期数据太多,定时删除并不能彻底删除(每次删除后仍有超过25%的过期key被删除)。同时,这些密钥永远不会被客户端再次请求,也无法被删除。惰性删除,内存满了怎么办?
答案是使用记忆消除机制。
故事从一个名为Redis帝国的三公九卿官方职位开始......
在Redis帝国中,整个帝国的国家法律、家庭法律和军事法律都登记在 公务员占有的国家领土资源大小的限制,是由一个叫“最大记忆”的司法官员设定的。有两种方法可以实现: 需要注意的是,如果 帝国官网资源限制已定。如果每年都选新人的话,就没有网站资源可以用了。我应该怎么办?如何选择一些公务员来消灭呢? Redis 4.0时代,总共有6种淘汰策略,后来又增加了2种新策略。 一般来说,我们可以根据是否要淘汰分为两类: 默认情况下,超过 这是一个相关家族,皇帝和国家的亲戚,永久的贵宾。你好。 随着官方人员的增加,资源容量迟早会满,因为不会被淘汰。满了之后,当“新人”想要进入时,Redis直接返回错误,命中。 秀,好任性。 剩下的7种策略也可以根据淘汰候选集和淘汰间隔分为两类: 故事到这里就结束了。那么“麻哥”就跟大家分享一下在实际Redis中如何选择正确的淘汰策略以及设置最佳的缓存大小。 消除执行流程如下图所示: 如果您的应用程序冷热数据差异比较明显,根据经验建议您使用该策略,并充分利用LRU算法来保留最后访问的数据数据。有限的内存提高了访问性能。 如果冷热数据没有明显差异,所有数据分布请求都比较均衡,这个数据会被随机询问,那么使用allkeys-random策略让它随机选择数据进行淘汰。 在业务场景中,有些数据是无法删除的,比如热门新闻、视频等。目前,我们没有为这些数据设置过期时间,这样数据就不会被删除,政策也会被移除。使用LRU算法淘汰有过期时间且最近被访问过的数据。 需要注意的一点是,设置密钥过期时间会消耗一些内存,所以使用 对于需要维护不可删除的数据以及所有数据都可以消除的业务系统,使用不同的Redis实例集群是一个更好的解决方案。 对于部分数据无法删除的业务场景,可以使用 缓存越大越好。以最低的成本获得最高的效益,才是老板想要的。 数据访问是本地化的。根据“28原则”:通常,20%的数据可以支持80%的访问请求。 那么我们可以将缓存容量设置为总数据量的20%吗? 当然不能那么绝对,这是一个理想的状态。因为可能存在一些个性化需求,不同用户访问的数据可能有很大差异,没有完全遵循“28原则”。 要根据实际接入特点和成本进行综合评估。根据经验,建议将容量设置为总数据量的15%~30%。 马哥,其他淘汰规则都比较简单,而 volatile-lru 和 volatile-lfu 则比较复杂。他们的算法是什么? volatile-lru 使用 LRU 算法来消除最近最少使用的数据。 volatile-lfu采用LFU算法,在LRU算法的基础上兼顾数据的时效性和访问频率。最少使用的密钥将被删除。 至于具体的算法细节,我们下次再分解。redis.conf中,它控制着整个帝国的运转。
CONFIG SET maxmemory 4gb
指定帝国官员土地资源最大为4GB; redis.conf
“Code”中注册maxmemory 4gb
法令,指定这个“Code”操作的使用。 maxmemory
为0,则64
“空格”位没有限制,而Redis内存消除策略
无驱逐
; noeviction不退役策略
maxmemory
值的资源不会被淘汰,不允许新人加入。 淘汰策略不同
maxmemory
限制,则根据策略丢弃数据。 allkeys-lru使用场景
allkeys-random使用场景
volatile-lru使用场景
allkeyds-lru
会提高内存效率。 volatile-lru
策略,其他类型可以使用allkyes-lru或allkeys-random。
Redis 的容量设置多少比较合适
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。