首页 > 数据库 >redis的key过期策略+内存淘汰策略

redis的key过期策略+内存淘汰策略

时间:2023-02-17 16:56:35浏览次数:31  
标签:策略 删除 过期 redis 键值 key 淘汰

redis的 key 过期策略是怎么样的

redis 的过期策略主要是定期删除和懒删除来实现的

定期删除

redis 定时每间隔大约100ms进行随机抽选择1批key,对过期的key进行删除,并且根据过期key的占比以及执行的实现来是否继续循环。为了就是在可控的时间内尽可能删除过期的key并且尽量不占用太多CPU资源影响业务请求。
具体步骤:

1. 从过期字典最近抽取20个key
2. 将这个20个key中过期的key进行删除,如果过期的key占比抽样的个数占比超过25%,重复1步骤;同时避免一致循环,执行时间超过25ms退出循环;

懒删除

通过定期删除,可以在一定程度上删除过期的key,但是可能删除不及时,又被请求访问到,所以在请求访问到过期key时,会触发删除,并且返回空给业务,保证过期的语义准确性。

  • 问:发现key过期时进行删除时,是异步删除还是同步删除?可能存在什么问题
  • 答:4.0之前是同步删除,如果是big key,同步删除会导致执行时间长,导致命令超时已经后续命令的执行超时等;4.0之后,为了解决删除 big key 带来的阻塞问题,提供了异步删除机制,如果判断是big key,将其扔到队列就返回,有专门的后台线程进行删除。

redis 的内存淘汰策略

redis 为了应对内存不足的场景,定制了8种策略给使用方进行配置选择,具体如下:

  1. Redis 4.0 之前有以下 6 种淘汰策略:
  • noeviction:不淘汰任何数据,当内存不足时,新增操作会报错,读请求不受影响,Redis 默认内存淘汰策略;
  • allkeys-lru:淘汰整个键值中最久未使用的键值;
  • allkeys-random:随机淘汰任意键值;
  • volatile-lru:淘汰所有设置了过期时间的键值中最久未使用的键值;
  • volatile-random:随机淘汰设置了过期时间的任意键值;
  • volatile-ttl:优先淘汰更早过期的键值。
  1. 在 Redis 4.0 版本中又新增了 2 种淘汰策略:
  • volatile-lfu:淘汰所有设置了过期时间的键值中,最少使用的键值;
  • allkeys-lfu:淘汰整个键值中最少使用的键值。
    其中 allkeys-xxx 表示从所有的键值中淘汰数据,而 volatile-xxx 表示从设置了过期键的键值中淘汰数据。
实战建议:生产实战中,使用最多的是 volatile-lru。同时听过配置使用容量阈值告警,一般超过60~80%就触发告警,评估是否需要进行扩容,避免出现超过最大内存。

本文由[mdnice](https://mdnice.com/?platform=5)多平台发布

标签:策略,删除,过期,redis,键值,key,淘汰
From: https://www.cnblogs.com/aisam/p/17130774.html

相关文章

  • 第一周复习笔记(MySQL、Redis、JVM、JUC)
    MySQL1.引擎1.1Innodb和MyIsAM的区别1.2Innodb的逻辑存储结构2.索引2.1索引的分类2.2索引优化2.3索引失效的场景3.事务3.1事务的隔离级别3.2ACID原则......
  • 超好用的 Redis GUI 工具,你值得拥有
    超好用的RedisGUI工具,你值得拥有提供原生的性能,并且比使用Electron等Web技术开发的同等应用程序消耗的资源少得多。下载地址:http://www.redisant.cn/功能介绍实......
  • python中的KeyError报错
    fromutilimportstr_util#业务逻辑:兼容不同的结构体:resCode转化数据#检查字典中是否存在键if'resCode'notinresultJsonif'resCode'notinresultJson:......
  • Redis 介绍
        ......
  • 启动项目报错org.yaml.snakeyaml.scanner.ScannerException: while scanning for the
    报错信息:org.yaml.snakeyaml.scanner.ScannerException:whilescanningforthenexttokenfoundcharacter‘@‘tSpringBoot项目启动突然报了个错,用的是yaml格式的......
  • kafka日志数据清理策略
    vim/kafka/server.properties #日志清理策略优先级是谁先满足条件.#保留7天的日志数据log.retention.hours=168#日志数据总大小保留100G,默认-1无穷大log.retenti......
  • Error: (1061, "Duplicate key name 'makerphoto_user_info_email_380c93a0_uniq'")
    django.db.utils.OperationalError:(1061,"Duplicatekeyname'makerphoto_user_info_email_380c93a0_uniq'")原因:你有可能在Mysql里修改过表结构,导致数据库与django不......
  • got multiple values for keyword argument 'to_fields'
    django.db.models.fields.related.ForeignObject.__init__()gotmultiplevaluesforkeywordargument'to_fields'原因:使用了to_fields说明:使用外键关联字段时,应该使......
  • redis的慢查询分析
    ########################### redis.conf配置文件的慢查询配置如下:##################################SLOWLOG####################################指定执行时......
  • Django操作redis
    一、环境安装基本环境:Python环境:Python3.8.16Django环境:4.1redis环境:参考搭建https://www.cnblogs.com/yclh/p/14742336.html并且已经添加了myApp的应用 安装red......