新增一个Redis 从节点为什么与主节点的key数量不一样呢?

  1. 过期键删除策略
    (1) 惰性删除
    放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。
    该策略对 CPU 来说是最友好的,只会在取出键时才对键进行过期检查,这可以保证删除过期键的操作只会在非做不可的情况下进行, 并且删除的目标仅限于当前处理的键,这个策略不会在删除其他无关的过期键上花费任何CPU时间。
    惰性删除策略的缺点是,它对内存是最不友好的: 如果一个键已经过期,而这个键又仍然保留在数据库中,那么只要这个过期键不被删除,它所占用的内存就不会释放。
    在使用惰性删除策略时,如果数据库中有非常多的过期键,而这些过期键又恰好没有被访问到的话,那么它们也许永远也不会被删除(除非用户手动执行FLUSHDB)。
    我们甚至可以将这种情况看作是一种内存泄漏一一无用的垃圾数据占用了大量的内存,而服务器却不会自己去释放它们,这对于运行状态非常依赖于内存的Redis服务器来说,肯定不是一个好消息。
    举个例子,对于一些和时间有关的数据,比如日志(log) ,在某个时间点之后,对它们的访问就会大大减少,甚至不再访问,如果这类过期数据大量地积压在数据库中,用户以为服务器已经自动将它们删除了,但实际上这些键仍然存在, 而且键所占用的内存也没有释放,那么造成的后果肯定是非常严重的。

(2) 定期删除

定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU 时间的影响。除此之外,通过定期删除过期键,定期删除策略有效地减少了因为过期键而带来的内存浪费。

定期删除策略的难点是确定删除操作执行的时长和频率:如果删除操作执行得太频繁,或者执行的时间太长,定期删除策略就会退化成定时删除策略,以至于将 CPU 时间过多地消耗在删除过期键上面。

如果删除操作执行得太少,或者执行的时间太短,定期删除策略又会和惰性删除策略一样,出现浪费内存的情况。因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除操作的执行时长和执行频率(通过参数 hz 调节)。

(3) 定时删除
定时删除策略对内存是最友好的:通过使用定时器,定时删除策略可以保证过期键会尽可能快地被删除,并释放过期键所占用的内存。另一方面,定时删除策略的缺点是,它对CPU 时间是最不友好的:在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分CPU 时间,在内存不紧张但是CPU 时间非常紧张的情况下.将CPU 时间用在删除和当前任务无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响。例如,如果正有大量的命令请求在等待服务器处理,并且服务器当前不缺少内存,那么服务器应该优先将CPU 时间用在处理客户端的命令请求上面,而不是用在删除过期键上面。

除此之外,创建一个定时器需要用到Redis 服务器中的时间事件,而当前时间事件的实现方式一一无序链表,查找一个事件的时间复杂度为O(N)一并不能高效地处理大量时间事件。因此,要让服务器创建大量的定时器,从而实现定时删除策略,在现阶段来说并不现实。

主从 keys 数量不一致原因
根据上面过期键删除策略,在从库重新挂载主库时,一般都会通过RDB文件重载数据,那么原主库在执行save命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查。已过期的键不会被保存到新创建的RDB文件中,但是仍然存在于原主库,这样在从库中看到的keys数量就会比主库少,此为正常现象。

看完本文有收获?请转发分享给更多人

关注「数据库架构师」公号,提升数据库技能

Original: https://www.cnblogs.com/databasepub/p/16659660.html
Author: 数据库架构师
Title: 新增一个Redis 从节点为什么与主节点的key数量不一样呢?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/715245/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 重磅发布码农界的第一张吉他专辑小样

    首先说明这不是标题党,呵呵。可以说这是我的第一张,应该也是全世界首张” 码农演奏的吉他录音小样” 。 很久没有发BLOG了。本来想从此”隐退&#…

    技术杂谈 2023年5月31日
    092
  • 【证券从业】金融基础知识-第三章 证券市场主体03

    注1:后续学习并整理到第八章,全书完结后再合并成一个笔记进行源文件分享 注2:本章内容巨多,大约分为三篇文章记录消化 posted @2022-06-04 00:48 陈景中 阅读…

    技术杂谈 2023年7月10日
    057
  • 配置中心Nacos(服务发现)

    服务演变之路 单体应用架构 在刚开始的时候,企业的用户量、数据量规模都⽐较⼩,项⽬所有的功能模块都放在⼀个⼯程中编码、编译、打包并且部署在⼀个Tomcat容器中的架构模式就是单体应…

    技术杂谈 2023年7月11日
    098
  • maven-排查包冲突

    原因:A系统 引用B系统的功能,但是B系统有一个redis需要排除,在已经排除的情况下,还是无效,出现redis存在问题。 解决方法: 需要用到maven查询结构树 去排查 到底j…

    技术杂谈 2023年7月24日
    086
  • Clickhouse入门及实践

    ClickHouse安装 采用doker安装测试: 拉取服务端 docker pull yandex/clickhouse-server 拉取客户端 docker pull yan…

    技术杂谈 2023年7月10日
    076
  • Saga是什么? 分布式事务的挑战

    前言 虽然一直说想写一篇关于Saga模式,在多次尝试后不得不承认这玩意儿的仿制代码真不是我一个菜鸟就能完成的,所以还是妥协般地引用现成的Eventuate Tram Saga框架(…

    技术杂谈 2023年5月31日
    097
  • linux服务器端多进程代码-服务器/客户端一对多

    一、多进程服务器代码 #include #include #include #include<string.h> #include /* See NOTES */ #i…

    技术杂谈 2023年7月11日
    078
  • HTTPS&SPDY&HTTP2&QUIC&HTTP3

    HTTPS 密钥交换,加密和解密 SPDY&HTTP2 QUIC&HTTP3 posted @2022-06-15 20:42 放飞梦想C 阅读(24 ) 评论()…

    技术杂谈 2023年7月24日
    085
  • docker官方仓库下载镜像

    官方仓库镜像地址:https://hub.docker.com/search/ 以下载mysql为例 进入到详情页后我们看到有很多Tags 我们选择5.7.25版本进行下载 doc…

    技术杂谈 2023年7月10日
    088
  • Vue笔记:bin-code-editor使用

    在 main.js 中写入以下内容: Original: https://www.cnblogs.com/-wenli/p/14902817.htmlAuthor: stdTitl…

    技术杂谈 2023年5月31日
    098
  • Docker自定义镜像无容器日志输出

    Docker自定义镜像无容器日志输出 因工作环境需要,需自己定制一个python环境的镜像,但制作完之后, docker logs发现无日志输出,经文档查询原来需要将日志重定向到标…

    技术杂谈 2023年6月21日
    081
  • @Autowired注解 注入的是单例还是多例

    前言:我在用@Autowired注解时候一直 好奇 他是每次给我的对象是同一个 还是 每次new一个新的给我 看了一些文档后发现@Autowired是单例模式 因为它:在注入之前,…

    技术杂谈 2023年5月30日
    077
  • MySQL服务器启动失败的问题

    MySQL服务器启动失败的问题 在启动mysql服务的时候失败了使用 mysqld –console这个命令查看一下日志信息,查询到如下的报错情况: [ERROR] Can’t …

    技术杂谈 2023年6月21日
    0113
  • Laravel新增路由文件配置

    简介: 如下,以6.0版本框架,新建一个路由文件,并且使用laravel的中间件,实现简单的登录验证。 生成路由的流程: 1:创建控制器文件:php artisan make:co…

    技术杂谈 2023年7月11日
    095
  • Eclipse插件安装方式及使用说明

    拷贝安装方式 1、通过ECLIPSE_HOME\plugins安装 在eclipse的主目录ECLIPSE_HOME, 比如在我的机器上安装的目录是:ECLIPSE_HOME有一个…

    技术杂谈 2023年5月31日
    069
  • [学习笔记]Java运算符

    Java支持的运算符:算术运算符、关系运算符、位运算符、逻辑运算符、赋值运算符、其他运算符; 算术运算符 算术运算遵循四则运算法则,可以嵌套任意的括号。算术运算符用在数学表达式; …

    技术杂谈 2023年7月24日
    053
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球