当前位置: 首页 > news >正文

Redis的过期策略

Redis的过期策略

            • [1] 定期删除(主动)
            • [2]惰性删除(被动)
            • [3] 定期删除+惰性删除
            • [4] 内存淘汰机制
            • [5] LRU算法

Redis keys过期有两种方式:定期扫描和惰性删除.

[1] 定期删除(主动)

定时删除,用一个定时器来负责监视所有key,当key过期则自动删除key.
虽然内存及时释放,但是十分消耗CPU资源.在大并发请求下,会影响redis的性能.

[2]惰性删除(被动)

客户端尝试访问key时,被访问的key会被发现并主动的过期

缺陷:有些过期的keys,永远不会访问他们,那么他们就永远不会被删除,而占用内存.

[3] 定期删除+惰性删除

**redis默认每100ms主动检查一次,如果有过期的key则删除,当满足1/4的keys过期,则重复之前步骤.**具体步骤为:

  1. redis默认每100ms随机抽取20个keys进行过期检查;
  2. 同时删除已经过期的keys,如果有多于25%的keys过期,则重复抽取.
  3. 直到过期的keys的百分比低于25%,
  4. 这意味着,在任何给定的时刻,最多会清除1/4的过期keys.
[4] 内存淘汰机制

采用定期删除+惰性删除就能保证过期的key会全部删除掉么?

如果定期删除没删除key.然后也没去请求key,也就是说惰性删除也没生效.这样,redis的内存会越来越高.那么就应该采用内存淘汰机制.
在redis.conf中有配置

maxmemory-policy volatile-lru

内存淘汰策略如下:

  • noeviction:当内存不足以容纳新写入数据时,新写入操作会报错,不建议使用
  • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key.推荐使用
  • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key
  • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key
  • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
  • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除
[5] LRU算法

在这里插入图片描述

相关文章:

  • 第三周作业 产品同质化问题
  • Redis分布式锁
  • LLVM3.8停止了旧Windows版本,取消Autoconf,改进Clang
  • Redis的I/O多路复用
  • mysql之select(一)
  • 多线程的 Redis
  • python中给程序加锁之fcntl模块的使用
  • 【VMCloud云平台】拥抱Docker(二)配置第一个容器
  • Redis持久化方式
  • Redis哨兵(Sentinel)模式
  • 倾斜的PDF页面怎样通过PDF Transformer+修正
  • 谈谈你对 MVC 模式的理解?
  • 将SSH移植到arm soc上
  • SpringMVC 的工作原理/执行流程?
  • 进程详解(1)——可能是最深入浅出的进程学习笔记
  • CEF与代理
  • input实现文字超出省略号功能
  • JWT究竟是什么呢?
  • Less 日常用法
  • linux安装openssl、swoole等扩展的具体步骤
  • mysql 数据库四种事务隔离级别
  • node学习系列之简单文件上传
  • Spring声明式事务管理之一:五大属性分析
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • vue-cli在webpack的配置文件探究
  • 反思总结然后整装待发
  • 来,膜拜下android roadmap,强大的执行力
  • 前端工程化(Gulp、Webpack)-webpack
  • 前嗅ForeSpider中数据浏览界面介绍
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用SAX解析XML
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 微信小程序填坑清单
  • 小试R空间处理新库sf
  • 怎么将电脑中的声音录制成WAV格式
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​queue --- 一个同步的队列类​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #QT(一种朴素的计算器实现方法)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (+4)2.2UML建模图
  • (42)STM32——LCD显示屏实验笔记
  • (AngularJS)Angular 控制器之间通信初探
  • (arch)linux 转换文件编码格式
  • (LeetCode C++)盛最多水的容器
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十)c52学习之旅-定时器实验
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (万字长文)Spring的核心知识尽揽其中
  • (一)Java算法:二分查找
  • (一)基于IDEA的JAVA基础12
  • (转)Oracle存储过程编写经验和优化措施
  • (转)shell调试方法