redis(三):redis缓存更新策略

redis缓存更新分为:内存溢出淘汰策略、过期删除策略、应用方更新

一、内存溢出淘汰策略

  • 当redis所用内存达到maxmemory时(use_memory>maxmemory),会触发相应的溢出控制策略,具体策略可配
根据LRU算法删除设置了超时属性(expire)的键,直到腾出足够空间为止。如果没有可删除的键对象,回退到noeviction策略。
maxmemory-policy volatile-lru

根据LRU算法删除键,不管数据有没有设置超时属性,直到腾出足够空间为止。
maxmemory-policy allkeys-lru

随机删除过期键,直到腾出足够空间为止。
maxmemory-policy volatile-random

随机删除所有键,直到腾出足够空间为止。
maxmemory-policy allkeys-random

根据键值对象的ttl属性,删除最近将要过期数据。如果没有,回退到noeviction策略
maxmemory-policy volatile-ttl

默认策略,不会删除任何数据,拒绝所有写入操作并返回客户端错误信息(error)OOM command not allowed when used memory,此时Redis只响应读操作。
maxmemory-policy noeviction
可用以下命令动态配置
config set maxmemory-policy {policy}

写命令导致当内存溢出时,会频繁执行,回收内存成本很高,如果redis有从节点,回收内存操作对应的删除命令会同步到从节点,导致写放大的问题。

二、过期删除策略

  • 惰性删除

redis的每个库都有一个过期字典,过期字典中保存所有key的过期时间。当客户端读取一个key时会先到过期字典内查询key是否已经过期,如果已经过期,会执行删除操作并返回空。

这种策略是出于节省CPU成本考虑,但是单独用这种方式存在内存泄露的问题,当过期键一直没有访问将无法得到及时删除,从而导致内存不能及时释放。

  • 定时删除

redis内部维护一个定时任务,默认每秒运行10次。通过hz修改运行次数。定时任务中删除过期键逻辑采用了自适应算法,根据键的过期比例、使用快慢两种速率模式回收键。ServerCron,慢模式:定时任务执行时间超过25毫秒自动退出。快模式:上次执行时间超过25毫秒,则采用快模式,快模式下超时时间为1毫秒且2秒内只能运行1次。

 

三、应用方更新

  • 应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中
  • 先删除缓存,再更新数据库(不推荐,并发下会出现读老数据的情况)
  • 先更新数据库,再删除缓存(推荐)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值