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文件,分别是SAVEBGSAVE,两者的区别在于是否阻塞进程去创建RDB文件,这两个命令都不会将数据空间中的过期键给保存到RDB文件中

载入

在启动Redis服务器时,如果服务器开启了RDB文件,那么服务器就会对RDB文件进行载入,需要注意⚠️的是:

  • 如果当前服务器是Master,那么过期键将会被忽略,不会载入到主服务器中;

  • 如果当前服务器是Slave,文件中所有键,不过是否过期都会被载入到从服务器中;

AOF 只追加持久化

写入

数据库中的过期键没有被删除时,其不会对AOF文件有任何的影响;当过期键被删除以后,程序会向AOF文件追加一条DEL命令,显示记录该键已经被删除;

重写

AOF是将执行的写命令添加到AOF文件的末尾来记录数据的变化;为了避免文件被添加得越来越大,甚至有可能用完硬盘的所有空间,因此Redis提供了Rewrite的优化策略,分别是REWRITEAOFBGREWRITEAOF,两个命令的区别也是在于是否阻塞主进程,这两个命令都不会将数据空间中的过期键给保存到AOF文件中

主从复模式下对过期键的处理

通常在主从模式下,主服务器来读取写命令,从服务器用来读取读命令,分担主服务器的压力(与那种持久化模式无关),需要注意⚠️的是:

  • 如果当前服务器是Slave的话,如果有命令读取当前过期键的话,不会惰性删除,因为这会影响读取的性能,因此不会删除,并且返回过期键对应的值;除非是Master服务器同步告知Slave服务器需要删除过期键才会删除;

  • 如果当前服务器是Master的话,当服务器通过策略得知某个键过期,则将该过期键给删除,并且同步给其他从服务器让它们删除掉该键;

来源:https://www.cnblogs.com/George1994/p/10681090.html

Redis淘汰删除策略相关推荐

  1. Redis过期删除策略和内存淘汰策略

    目录 一.过期删除策略 1.如何设置过期时间? 2.如何判定 key 已过期了? 3.过期删除策略有哪些? 1.定时删除策略 2.惰性删除策略 3.定期删除策略 4.Redis 过期删除策略 5.Re ...

  2. 面试官:Redis 过期删除策略和内存淘汰策略有什么区别?

    作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林. Redis 的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都 ...

  3. Redis 缓存删除策略

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...

  4. 说说 Redis 缓存删除策略

    Redis 缓存删除策略分为定时删除.定期删除与惰性删除.前两个是主动删除,后一个是被动删除. 1 定时删除 为 key 设置一个过期时间,时间一到,由定时器任务删除这个 key. 优点:节省内存,因 ...

  5. redis的删除策略和淘汰策略

    删除策略:是当数据到期,redis对过期数据的处理策略. 1.定时删除:当某一个key的过期时间到达后,redis就把对应的value和key删除. 优点是省内存,能快速的把过期数据删除腾出空间. 缺 ...

  6. redis 数据删除策略和逐出算法

    数据存储和有效期# 在 redis 工作流程中,过期的数据并不需要马上就要执行删除操作.因为这些删不删除只是一种状态表示,可以异步的去处理,在不忙的时候去把这些不紧急的删除操作做了,从而保证 redi ...

  7. redis 数据删除策略

    Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态,Redis 的数据删除策略,就是在内存和CPU中找一个平衡点,避免redis性能下降,甚至服务器宕机或者 ...

  8. 【Redis】Redis过期删除策略和内存淘汰策略剖析(Redis专栏启动)

  9. Redis的删除策略,删除我是认真的

    定时删除,每一个key都设置过期时间,每个key都用一个线程跟踪,当这个key过了过期时间,该线程就将这个key删除:但是当key的数量很大时,就会有很多线程,CPU的占用量会非常大 public c ...

最新文章

  1. 【两分钟带你了解树】数据结构04-树结构的概述
  2. 神策数据算法专家:推荐系统的实践与思考(下)
  3. 用cxf公布和调用web service
  4. Java jdbctemplate赋值_JDBCTemplate基本使用
  5. 声速的测量的实验原理和应用_CEMS烟气在线分析仪测量原理计经典应用
  6. 云评测 | 开发者最有用的开源云监控工具有哪些呢? 这7款神器总有一款适合你!...
  7. linux下进程监听端口,linux下查看监听端口对应的进程
  8. einsum爱因斯坦求和(numpy)
  9. C4D电商促销活动背景素材|设计提升,只差一个背景
  10. oracle复制表结构与表数据
  11. 系统签名缺少libconscrypt_openjdk_jni.so解决
  12. 管理感悟:如何处理不干活的主管
  13. java checked异常有那些_JAVA 的checked异常和unchecked异常
  14. win10电脑360调用不到JAVA,win10系统打不开360浏览器快捷方式的修复步骤
  15. 软件企业变更管理流程
  16. 【PageHelper】实现拦截pageNum和pageSize
  17. 【防火墙篇】01. 恢复出厂设置 ❀ Juniper 防火墙
  18. 问题描述:宏代码导致无法打开文件
  19. 渗透测试思路 - 工具篇
  20. IT 技术学习资料分享

热门文章

  1. B17_NumPy IO(save,load,savez,loadtxt,savetxt)
  2. 安装elasticsearch-analysis-ik中文分词器
  3. solr快速入门的地址,spring-data/solr
  4. 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景
  5. [BAT][JAVA]定时任务之-Quartz使用篇(通过这个配置可以知道在做Quartz的时候需要的jar文件/Cron表达式使用语法/常用Cron表达式)
  6. JavaScript中window对象属性,时间等的总结
  7. 深度学习论文资源(截至2016年)
  8. modelsim与modelsim_altera使用的一些区别
  9. Windows环境 和 Linux环境下搭建Qt开发环境
  10. 错误sudo: pip: command not found解决方案