Redis内存回收机制

RDB内存回收机制主要从两方面考虑

删除过期键

	redis可以对所有的键设置过期属性,过期键会存在过期字典中,字典中保存了大量的过期键会占用内存,所以要有删除机制。过期键删除有三种机制
  • 定时删除
    设置一个过期键的同时,会创建一个定时器,让定时器在过期时间来临的时候执行过期操作。这样,删除过期键会占用CPU的时间,影响服务器的吞吐量
    优点:能尽快释放内存,最大程度节省空间
    缺点:需要大量的定时器去删除过期键,占用CPU时间,影响服务器的性能
  • 惰性删除
    对过期时间放任不管,但是每次从键空间去获取的时候,都会去检查是否过期,如果已过期,执行删除操作,如果没有,返回该键。被动删除
    优点:就不会占用CPU的时间
    缺点:对内存很不友好
  • 定期删除
    定期删除是定时删除和惰性删除的折中,每隔一段时间,程序就会对数据进行检查,删除里面的过期键,限制删除过期键的时长和频率,来减少删除操作对CPU的影响
    redis.conf 配置文件 hz 默认是每秒运行10次
    redis是使用定期删除和惰性删除两种

####AOF、RDB和复制功能对过期键的影响

  • RDB
    1、生成RDB文件
    在执行save或bgsave命令生成新的RDB文件时,会对过期键进行检查,如果键已经过期,不写写入RDB文件
    2、执行RDB文件
    在重启Redis服务器时,如果已经开启了RDB,会载入RDB 文件。如果是以主服务器进行载入,会对RDB文件的过期键进行检查,不会把已过期的键载入数据。如果是以从服务器进行载入,不会删除过期键,但是同步的时候会删除,所以也不会保留过期键
  • AOF
    1、写入AOF文件
    在写入AOF文件的时候,如果过期键还没有被定期删除或者惰性删除,那么写入的时候会保留过期键,但是在被定期或惰性删除的时候,会加入一条delete命令,来记录该键已被删除
    2、AOF文件重写
    AOF重写的时候会对过期键进行检查,已过期的键不会被重写到数据,因此过期键不会对AOF有影响
  • 复制
    主服务器会删除过期键,同时会发给从服务器该操作

内存溢出淘汰策略

当Redis内存达到maxmemory上限时会出发响应的内存溢出策略,具体策略配置受maxmemory-policy控制

  • volatile-lru:当内存空间不足以写入新数据时,在设置了过期时间的键中,移除最近很少用的key
  • allkeys-lru:当内存空间不足以写入新数据时,在键空间中,移除最近很少使用的key
  • volatile-lfu:当内存空间不足以写入新数据时,在设置了过期时间的键中,移除最少用的key
  • allkeys-lfu:当内存空间不足以写入新数据时,在键空间中,移除最少用的key
  • volatile-random:当内存空间不足以写入新数据时,在设置了过期时间的键中,随机选择某个删除,不推荐
  • allkeys-random:当内存空间不足以写入新数据时,在所有的键中,随机删除某个key,不推荐
  • volatile-ttl:当内存不足以写入新的数据时,在设置了过期时间的键空间中,选择最早时间过期的键删除,不推荐,如果没有设置过期时间的键,会报错
  • noeviction:默认策略,当内存不足以写入新数据时,直接报错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值