Redis中有一些Key到期了,需要一些策略来处理这些过期的key, 设置到期时间的key会放入一个单独的字典中,以后会定时遍历这个这个字典来删除到期的key,除了定时遍历以外,还会使用惰性策略来删除过期的key,当客户端访问这个的key时候会检查到期时间,到期了就立即删除。而定时删除是集中式处理。

一 Redis定时扫描策略

Redis是单线程,如果某一段时间过期的key很多,删除的时候会不会出现卡顿情况。Redis有一个定时扫描策略:

#1 Redis默认1秒扫描10次有到期时间的字典,即差不多100ms扫描一次

#2从过期字典中随机选择20个key进行扫描,将已经过期的key删除掉

#3 统计这一批20个key中的删除比例,如果有25%的key需要删除,则再进行一轮,即重复步骤2

#4 同时,为了保证过期扫描不会出现循环过度,导致线程卡死现象,算法还增加了扫描时间的上限,默认扫描不会超过 25ms。

所以当客户端请求到来的时候,如果服务器正好在进行过期扫描,客户端的请求将会等待至少25毫秒才会处理,如果客户端连接设置的比较短有可能因为超时而关闭。所以如果有大批量的key需要过期,一定要设置随机到期时间,不适合在同一时间全部过期,分散处理过期范围。

二 从库的过期策略

2.1 从库不会主动删除过期的key

从库不会主动过期,既不会主动扫描过期。当主库的key到期的时候,会在AOF文件中增加一条del指令来删除过期的key。因为del指令是异步执行的,所以主库过期的key的del指令没有及时同步到从库的话,会出现从库数据不一致的情况。

2.2 主从数据同步,存在数据不一致的情况的解决方案

第一:如果业务允许段时间内主从不一致,则可以使用这样的方式

第二:如果确实不允许主从数据不一致,则该请求强行读主库

三 内存不足的时候key的淘汰策略

当Redis内存超过物理内存限制的时候,内存的数据开始和磁盘产生频繁的交换,这会使得Redis的性能急剧下降,生产环境一般是不允许这样的情况存在。为了限制最大使用内存,Redis提供了配置参数maxmemory来限制内存超出期望的大小。当实际使用内存超出maxmemory的时候,Redis提供了几种可以选择的策略,让用户自己来选择如何腾出新的空间以继续提供服务。

3.1 noeviction

不会继续服务写请求(del请求除外),读请求可以继续执行

3.2 volatile-lru

当内存不够的时候,对于最近很少使用的设置了过期时间的key进行淘汰

3.3 volatile-ttl

当内存不足的时候,对于设置了过期时间的key,剩余存活时间越短的key越先被淘汰

3.4 volatile-random

当内存不足的时候,从设置了到期时间的key中随机选择一部分key进行淘汰

3.5 allkeys-lru

当内存不足的时候,从所有的key中选择最近很少使用的进行淘汰

3.6 allkeys-random

当内存不足的时候,从所有的key中随机选择进行淘汰

我们知道key过期处理方式有2种: 集中删除和惰性删除。LRU淘汰不一样吗,只有惰性删除,当Redis执行写操作的时候,发现内存不够,超过了maxmemory,就会执行一次LRU淘汰算法,随机采样出5个(maxmemory_samples配置)个key,如果淘汰后内存还是超出maxmemory,则继续淘汰5个,直到低于maxmemory为止。

Redis之key的淘汰策略相关推荐

  1. Redis缓存过期和淘汰策略

    题记: 文章内容输出来源:拉勾教育Java高薪训练营. 本篇文章是 Redis 学习课程中的一部分笔记. Redis缓存过期和淘汰策略 Redis性能高: 官方数据 读:110000次/s 写:810 ...

  2. Redis 过期 key 清理删除策略汇总

    Redis 底层使用了三种策略来清理过期的key 一.被动清理 触发条件:读/写一个已经过期的key 当读写一个key时,Redis首先检查key是否存在,若存在且已经过期,则删除key的同时返回ni ...

  3. redis过期key的删除策略

    前言 在使用redis的过程中,不免会产生过期的key,而这些key过期后并不会实时地马上被删除,当这些key数量累积越来越多,就会占用很多内存,因此在redis底层同时使用了三种策略来删除这些key ...

  4. 阿里云Redis数据过期和淘汰策略解答

    背景 阿里云Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制. 用户在使用阿里云Redis时,除了对性能,稳定性有很高的要求外,对内存占用也比较敏感.在使用过程中,有些用户 ...

  5. Redis[5] key的过期时间删除策略、实现lru算法、持久化配置

    文章目录 Redis[5] key的过期时间删除策略.持久化配置 **Redis6的key过期时间删除策略** Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,服务 ...

  6. 【带你重拾Redis】Redis过期策略 和 内存淘汰策略(key回收)

    过期策略 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效. 如果假设你设置一个一批key只能存活1个小 ...

  7. redis的淘汰策略

    在 redis 中,对于已经过期的数据,Redis 采用两种策略来处理这些数据,分别是惰性删除和定期删除 惰性删除 惰性删除不会去主动删除数据,而是在访问数据的时候,再检查当前键值是否过期,如果过期则 ...

  8. 高性能分布式缓存redis(持久化原理 安全策略 过期删除内存淘汰策略 性能压测 高可用 Redis Cluster)

    redis redis(持久化原理 安全策略 过期删除&内存淘汰策略 性能压测 高可用 Redis Cluster) 1. 持久化原理 1.1 持久化流程(落盘) 1.2 RDB详解 1.2. ...

  9. Redis内存淘汰策略LRU、LFU详解

    Redis内存淘汰原因 Redis是一种内存数据库,redis的容量往往有限,无法存放所有的数据.当内存满了的时候,并且这个时候还需要往Redis中放入新的数据,就需要将Redis中的一部分数据淘汰了 ...

最新文章

  1. vsFTPd 服务器初学者指南
  2. socket和IOCTL结合实现网络采集
  3. 牛客练习赛69C-旅行【结论,最大生成树】
  4. 单目摄像机测距(python+opencv)(转载)
  5. 安卓新发布机制----app bundle
  6. docker kibana mysql_docker 安装常用组件:[redis,mysql,mongodb,elasticsearch,kibana,exceptionless]...
  7. 陈大惠老师:什么叫道德?
  8. PHP错误日志记录:display_errors与log_errors的区别
  9. 如果企业级客户不爽,亚马逊AWS该怎么办?
  10. 学习Hadoop需要哪些预备知识?Java是否必须会?
  11. 中国网和七牛云达成战略合作,携手打造国际化融媒中心
  12. WWDC20中iOS的改变
  13. 冒泡法排序c语言源程序,冒泡排序算法实例程序(C语言)
  14. w ndows系统启动日志ID,查看windows系统日志方法
  15. SpringBoot+Layui就业信息管理系统
  16. 周纪三 周慎靓王元年(辛丑,公元前320年)——摘要
  17. 双硬盘安装win10和linux双系统,双硬盘最初尝试完美安装Windows10 + ubuntu16双系统
  18. 对你快速了解恶意软件以及病毒和反病毒
  19. 【Unity】Unity3D RPG游戏制作实例(一)游戏简介及文档目录整理
  20. arcgis 10.8 for win10安装教程

热门文章

  1. 单片微型计算机与接口技术第5版重点,韶关学院《单片微型计算机与接口技术》(第5版)思考题与习题解答.pdf...
  2. 谷歌查询mysql,谷歌地图:使用mysql查询更新标记不起作用
  3. pyqt5 qwidget 边框_实战PyQt5: 116-画刷类QBrush
  4. Python机器学习:SVM008scikit-learn中的高斯核函数
  5. audio标签的controls属性_HTML5 新增标签和属性
  6. java extern的作用_学习笔记之20-static和extern关键字2-对变量的作用
  7. omwin密立根油滴实验数据处理程序_哈工程最新大物实验报告29——磁场的测量...
  8. atm机存款场景图_被ATM机吞掉的钱
  9. java质因数算法_Java实现的质因数分解操作示例【基于递归算法】
  10. java获取mysql数据定时执行_mysql 事件处理(定时触发某个任务或存储过程等)