Redis 内存管理策略

Stella981
• 阅读 388

背景

Redis很多时候都是在使用内存,数据一直写,但内存是有限的,如果Redis内存满了,那么我们的很多缓存操作都会超时、失败,接着可能会引发雪崩。那么当内存达到阀值Redis是怎么处理的呢?

配置内存限制maxmemory

我们可以通过在配置文件中配置maxmemory来限制内存的最大使用情况。如果maxmemory为0则表示无限制。 在redis.cn中配置如下配置:

maxmemory 1000mb //配置内存限制为1G

默认的当内存达到我们配置的指定大小时会返回错误,异常为OOM异常,即已经没有足够的内存供试用。这是因为默认情况下Redis是不选择任何内存回收策略的。

配置内存回收策略

当内存达到最大限制时触发内存回收策略。我们可以通过maxmemory-policy来指定内存回收策略。 例如:maxmemory-policy volatile-ttl

Redis内置的策略种类

noeviction: 禁止驱逐数据(默认);当内存达到限制时并且客户端尝试执行一些消耗内存的命令时返回错误,即OOM异常。 **allkeys-lru:**尝试回收最少使用的键 **volatile-lru:**尝试回收最少使用的键,但仅限于在已设置过期集合的键。 allkeys-random: 回收随机的键 **volatile-random:**回收随机的键,仅限于在已设置过期集合的键。 **volatile-ttl:**回收过期集合的键,并且优先回收存活时间较短的键,使得新添加的数据有地方可存放。

4.x引入的策略

从redis4.0开始引入了一个新的策略模式:LFU全称:Least Frequently Used。即最近很少使用。 两种策略:volatile-lfuallkeys-lfu

volatile-lfu: 在已设置过期的数据集中选择最不常使用的数据淘汰 allkeys-lfu: 从数据集中挑选最近最不常使用的数据淘汰。

回收进程如何工作

当客户端运行了一个新的命令,添加了新的数据 Redis检查内存使用情况 ,如果大于maxmemory的限制,则根据设定好的策略进行回收 新的命令被执行。。。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
2年前
Redis持久化RDB和AOF实现原理
Redis持久化RDB和AOF为什么Redis需要持久化?因为Redis属于内存型数据库,数据是储存在内存当中的,当遇到不可抗力因素,比如断电,那么储存在内存中的数据就会丢失。所以为了保证数据的完整性,我们需要做持久化操作,来保证数据的完整性。Redis中都有哪些持久化机制?Redis早
Stella981 Stella981
2年前
Redis的分片机制包含对一致性HASH算法的运用
前言:大家都知道redis单台的默认内存大小一般是10M.如果现在需要我们将1G的数据保存到内存中。这该如何做到呢?比如我们就用单台redis,但是一味的扩大单台redis内存则直接影响执行的效率,会有一种得不偿失的感觉。于是呢,我们就得采用分片策略实现数据保存,通过多台redis共同为用户提供内存得支持,实现内存扩容,提高执行效率!!
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Redis内存淘汰机制及过期Key处理
  “天长地久有时尽,此恨绵绵无绝期。”好诗!好诗啊!即使是天长地久,也总会有尽头,那么,Redis的内存是不是也会有时尽呢?答案是肯定的。那么,当Redis的内存满了以后,再来新的请求,我们该怎么办呢?这时候,大家就应该来了解Redis的内存淘汰策略了,了解了相关的知识点后,就能明白“Redis内存有时尽”后,会发生些什么。Redis内存淘汰机制
Stella981 Stella981
2年前
32位xp系统识别4G以上内存
32位xp系统识别4G以上内存大多数用户使用的xp系统都是32位,32位操作系统无法识别4G以上的内存,即便是4G内存,最多只能识别3.25G左右的内存。那么xp系统要怎么识别4G内存呢?!icon_rar.gif(https://static.oschina.net/uploads/img/202007/
Stella981 Stella981
2年前
Redis(二十):Redis数据过期和淘汰策略详解(转)
原文地址:https://yq.aliyun.com/articles/257459背景Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制。用户在使用Redis时,除了对性能,稳定性有很高的要求外,对内存占用也比较敏感。在使用过程中,有些用户会觉得自己的线上实例内存占用比自己预想的要大。事实上,实例中的内存除
Stella981 Stella981
2年前
Redis 淘汰策略解读
摘要:   Redis在生产环境中,采用配置参数maxmemory的方式来限制内存的大小。当实际存储内存超过maxmemory参数值时,开发者可以通过Redis内存淘汰策略,来决定如何腾出新空间继续支持读写工作。工作情况    首先,客户端会发起需要更多内存的申请;其次,Redis检查内存使用情况,如果