Redis淘汰删除策略
Redis淘汰删除策略
Redis淘汰删除策略6种淘汰Key策略3种删除过期键策略定时删除惰性删除定期删除其他模块的淘汰处理RDB 快照持久化创建载入AOF 只追加持久化写入重写主从复模式下对过期键的处理
6种淘汰Key策略
Redis中通过maxmemory参数来设定内存的使用上限,当Redis使用内存达到设定的最大值的时候,会根据配置文件中的策略选取要删除的key来删除,从而给新的键值留出空间;
目前Redis提供了6种的淘汰策略(默认的是noeviction):
volatile-lru,在设置了过期时间的键空间中,移除最近最少使用的key;
allkeys-lru,移除最近最少使用的key;
volatile-random,在设置了过期时间的键空间中,随机移除一个key;
allkeys-random,随机移除一个key;
volatile-ttl,在设置了过期时间的键空间中,移除将要过期的key;
noeviction,当内存使用达到阀值的时候,所有引起申请内存的命令会报错;
3种删除过期键策略
前面我们知道需要淘汰掉哪些过期Key,但是我们应该怎么去淘汰这些过期key呢?有3种删除的操作策略:
定时删除
在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作;
定时删除操作对于内存来说是友好的,内存不需要操作,而是通过使用定时器,可以保证尽快的将过期键删除,但是对于CPU来说不是友好的,如果过期键比较多的话,起的定时器也会比较多,删除的这个操作会占用到CPU的资源;
惰性删除
放任键过期不管,但是每次从键空间中获取键是,都检查取得的键的过期时间,如果过期的话,删除即可;
惰性操作对于CPU来说是友好的,过期键只有在程序读取时判断是否过期才删除掉,而且也只会删除这一个过期键,但是对于内存来说是不友好的,如果多个键都已经过期了,而这些键又恰好没有被访问,那么这部分的内存就都不会被释放出来;
定期删除
每隔一段时间,程序就对数据库进行一次检查,删除掉过期键;
定期删除是上面两种方案的折中方案,每隔一段时间来删除过期键,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响,除此之外,还有效的减少内存的浪费;但是该策略的难点在于间隔时长,这个需要根据自身业务情况来进行设置;
目前,Redis采用的是惰性删除+定期删除的方案;
其他模块的淘汰处理
目前Redis提供了两种持久化方式,分别是RDB和AOF;
RDB 快照持久化
创建
RDB是通过创建快照获取内存中的数据在某一个时间点上的数据的副本;有两个命令可以创建RDB文件,分别是SAVE
和BGSAVE
,两者的区别在于是否阻塞进程去创建RDB文件,这两个命令都不会将数据空间中的过期键给保存到RDB文件中;
载入
在启动Redis服务器时,如果服务器开启了RDB文件,那么服务器就会对RDB文件进行载入,需要注意⚠️的是:
如果当前服务器是
Master
,那么过期键将会被忽略,不会载入到主服务器中;如果当前服务器是
Slave
,文件中所有键,不过是否过期都会被载入到从服务器中;
AOF 只追加持久化
写入
数据库中的过期键没有被删除时,其不会对AOF文件有任何的影响;当过期键被删除以后,程序会向AOF文件追加一条DEL
命令,显示记录该键已经被删除;
重写
AOF是将执行的写命令添加到AOF文件的末尾来记录数据的变化;为了避免文件被添加得越来越大,甚至有可能用完硬盘的所有空间,因此Redis提供了Rewrite
的优化策略,分别是REWRITEAOF
和BGREWRITEAOF
,两个命令的区别也是在于是否阻塞主进程,这两个命令都不会将数据空间中的过期键给保存到AOF文件中;
主从复模式下对过期键的处理
通常在主从模式下,主服务器来读取写命令,从服务器用来读取读命令,分担主服务器的压力(与那种持久化模式无关),需要注意⚠️的是:
如果当前服务器是
Slave
的话,如果有命令读取当前过期键的话,不会惰性删除,因为这会影响读取的性能,因此不会删除,并且返回过期键对应的值;除非是Master
服务器同步告知Slave
服务器需要删除过期键才会删除;如果当前服务器是
Master
的话,当服务器通过策略得知某个键过期,则将该过期键给删除,并且同步给其他从服务器让它们删除掉该键;
来源:https://www.cnblogs.com/George1994/p/10681090.html
Redis淘汰删除策略相关推荐
- Redis过期删除策略和内存淘汰策略
目录 一.过期删除策略 1.如何设置过期时间? 2.如何判定 key 已过期了? 3.过期删除策略有哪些? 1.定时删除策略 2.惰性删除策略 3.定期删除策略 4.Redis 过期删除策略 5.Re ...
- 面试官:Redis 过期删除策略和内存淘汰策略有什么区别?
作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林. Redis 的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都 ...
- Redis 缓存删除策略
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...
- 说说 Redis 缓存删除策略
Redis 缓存删除策略分为定时删除.定期删除与惰性删除.前两个是主动删除,后一个是被动删除. 1 定时删除 为 key 设置一个过期时间,时间一到,由定时器任务删除这个 key. 优点:节省内存,因 ...
- redis的删除策略和淘汰策略
删除策略:是当数据到期,redis对过期数据的处理策略. 1.定时删除:当某一个key的过期时间到达后,redis就把对应的value和key删除. 优点是省内存,能快速的把过期数据删除腾出空间. 缺 ...
- redis 数据删除策略和逐出算法
数据存储和有效期# 在 redis 工作流程中,过期的数据并不需要马上就要执行删除操作.因为这些删不删除只是一种状态表示,可以异步的去处理,在不忙的时候去把这些不紧急的删除操作做了,从而保证 redi ...
- redis 数据删除策略
Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态,Redis 的数据删除策略,就是在内存和CPU中找一个平衡点,避免redis性能下降,甚至服务器宕机或者 ...
- 【Redis】Redis过期删除策略和内存淘汰策略剖析(Redis专栏启动)
- Redis的删除策略,删除我是认真的
定时删除,每一个key都设置过期时间,每个key都用一个线程跟踪,当这个key过了过期时间,该线程就将这个key删除:但是当key的数量很大时,就会有很多线程,CPU的占用量会非常大 public c ...
最新文章
- 【两分钟带你了解树】数据结构04-树结构的概述
- 神策数据算法专家:推荐系统的实践与思考(下)
- 用cxf公布和调用web service
- Java jdbctemplate赋值_JDBCTemplate基本使用
- 声速的测量的实验原理和应用_CEMS烟气在线分析仪测量原理计经典应用
- 云评测 | 开发者最有用的开源云监控工具有哪些呢? 这7款神器总有一款适合你!...
- linux下进程监听端口,linux下查看监听端口对应的进程
- einsum爱因斯坦求和(numpy)
- C4D电商促销活动背景素材|设计提升,只差一个背景
- oracle复制表结构与表数据
- 系统签名缺少libconscrypt_openjdk_jni.so解决
- 管理感悟:如何处理不干活的主管
- java checked异常有那些_JAVA 的checked异常和unchecked异常
- win10电脑360调用不到JAVA,win10系统打不开360浏览器快捷方式的修复步骤
- 软件企业变更管理流程
- 【PageHelper】实现拦截pageNum和pageSize
- 【防火墙篇】01. 恢复出厂设置 ❀ Juniper 防火墙
- 问题描述:宏代码导致无法打开文件
- 渗透测试思路 - 工具篇
- IT 技术学习资料分享
热门文章
- B17_NumPy IO(save,load,savez,loadtxt,savetxt)
- 安装elasticsearch-analysis-ik中文分词器
- solr快速入门的地址,spring-data/solr
- 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景
- [BAT][JAVA]定时任务之-Quartz使用篇(通过这个配置可以知道在做Quartz的时候需要的jar文件/Cron表达式使用语法/常用Cron表达式)
- JavaScript中window对象属性,时间等的总结
- 深度学习论文资源(截至2016年)
- modelsim与modelsim_altera使用的一些区别
- Windows环境 和 Linux环境下搭建Qt开发环境
- 错误sudo: pip: command not found解决方案