Redis之key的淘汰策略
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的淘汰策略相关推荐
- Redis缓存过期和淘汰策略
题记: 文章内容输出来源:拉勾教育Java高薪训练营. 本篇文章是 Redis 学习课程中的一部分笔记. Redis缓存过期和淘汰策略 Redis性能高: 官方数据 读:110000次/s 写:810 ...
- Redis 过期 key 清理删除策略汇总
Redis 底层使用了三种策略来清理过期的key 一.被动清理 触发条件:读/写一个已经过期的key 当读写一个key时,Redis首先检查key是否存在,若存在且已经过期,则删除key的同时返回ni ...
- redis过期key的删除策略
前言 在使用redis的过程中,不免会产生过期的key,而这些key过期后并不会实时地马上被删除,当这些key数量累积越来越多,就会占用很多内存,因此在redis底层同时使用了三种策略来删除这些key ...
- 阿里云Redis数据过期和淘汰策略解答
背景 阿里云Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制. 用户在使用阿里云Redis时,除了对性能,稳定性有很高的要求外,对内存占用也比较敏感.在使用过程中,有些用户 ...
- Redis[5] key的过期时间删除策略、实现lru算法、持久化配置
文章目录 Redis[5] key的过期时间删除策略.持久化配置 **Redis6的key过期时间删除策略** Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,服务 ...
- 【带你重拾Redis】Redis过期策略 和 内存淘汰策略(key回收)
过期策略 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效. 如果假设你设置一个一批key只能存活1个小 ...
- redis的淘汰策略
在 redis 中,对于已经过期的数据,Redis 采用两种策略来处理这些数据,分别是惰性删除和定期删除 惰性删除 惰性删除不会去主动删除数据,而是在访问数据的时候,再检查当前键值是否过期,如果过期则 ...
- 高性能分布式缓存redis(持久化原理 安全策略 过期删除内存淘汰策略 性能压测 高可用 Redis Cluster)
redis redis(持久化原理 安全策略 过期删除&内存淘汰策略 性能压测 高可用 Redis Cluster) 1. 持久化原理 1.1 持久化流程(落盘) 1.2 RDB详解 1.2. ...
- Redis内存淘汰策略LRU、LFU详解
Redis内存淘汰原因 Redis是一种内存数据库,redis的容量往往有限,无法存放所有的数据.当内存满了的时候,并且这个时候还需要往Redis中放入新的数据,就需要将Redis中的一部分数据淘汰了 ...
最新文章
- vsFTPd 服务器初学者指南
- socket和IOCTL结合实现网络采集
- 牛客练习赛69C-旅行【结论,最大生成树】
- 单目摄像机测距(python+opencv)(转载)
- 安卓新发布机制----app bundle
- docker kibana mysql_docker 安装常用组件:[redis,mysql,mongodb,elasticsearch,kibana,exceptionless]...
- 陈大惠老师:什么叫道德?
- PHP错误日志记录:display_errors与log_errors的区别
- 如果企业级客户不爽,亚马逊AWS该怎么办?
- 学习Hadoop需要哪些预备知识?Java是否必须会?
- 中国网和七牛云达成战略合作,携手打造国际化融媒中心
- WWDC20中iOS的改变
- 冒泡法排序c语言源程序,冒泡排序算法实例程序(C语言)
- w ndows系统启动日志ID,查看windows系统日志方法
- SpringBoot+Layui就业信息管理系统
- 周纪三 周慎靓王元年(辛丑,公元前320年)——摘要
- 双硬盘安装win10和linux双系统,双硬盘最初尝试完美安装Windows10 + ubuntu16双系统
- 对你快速了解恶意软件以及病毒和反病毒
- 【Unity】Unity3D RPG游戏制作实例(一)游戏简介及文档目录整理
- arcgis 10.8 for win10安装教程
热门文章
- 单片微型计算机与接口技术第5版重点,韶关学院《单片微型计算机与接口技术》(第5版)思考题与习题解答.pdf...
- 谷歌查询mysql,谷歌地图:使用mysql查询更新标记不起作用
- pyqt5 qwidget 边框_实战PyQt5: 116-画刷类QBrush
- Python机器学习:SVM008scikit-learn中的高斯核函数
- audio标签的controls属性_HTML5 新增标签和属性
- java extern的作用_学习笔记之20-static和extern关键字2-对变量的作用
- omwin密立根油滴实验数据处理程序_哈工程最新大物实验报告29——磁场的测量...
- atm机存款场景图_被ATM机吞掉的钱
- java质因数算法_Java实现的质因数分解操作示例【基于递归算法】
- java获取mysql数据定时执行_mysql 事件处理(定时触发某个任务或存储过程等)