2019年12月2日

本篇文章给大家介绍DCache的CacheServer中,过期线程-ExpireThread和删除线程-DeleteThread的处理流程。

ExpireThread

作用:定时作业,清理过期数据

在cache 配置列表的第2页:

#是否启动过期清除线程
StartExpireThread=Y
#是否清除后端数据库
ExpireDb=Y
#每次清除过期数据的时间间隔(秒)
ExpireInterval=300
#清除频率, 0 表示不限制
ExpireSpeed=0
StartExpireThread 清除线程的总开关,配置成”Y”或”y”才会开启功能;
ExpireInterval 清除时间间隔,每隔300s执行一次
ExpireSpeed

清除频率,即瞬时清除的数据量。假设配置成1000,则下一个ExpireInterval到来时,删除了1000条过期数据后,会休眠10秒再执行删除

ExpireDb

是否清除后端数据库,在清除缓存的同时,删除数据库中的记录(这里只是将数据的标识置位delSetBit,由Delete线程删除)

说明:

每一条数据在Set到内存时都可以设置过期时间(在msyql中对应表中的字段为sDCacheExpireTime),ExpireThread就会以此为依据,判断是否设置清理标识。


DeleteThread

作用:定时清理内存(和数据库)中已被标记为delete的数据

脏数据:未同步到后端数据库的内存数据。

配置解析

#是否启动删除线程
StartDeleteThread=Y
#delete线程操作时间间隔(秒)
DeleteInterval=300
#delete线程删除速度,0表示不限速
DeleteSpeed=0
StartDeleteThread server启动时判断,是否启动删除线程
DeleteInterval delete线程初始化后读取,每个 DeleteInterval 秒,执行一次
DeleteSpeed

每个周期删除的记录数,达到该值后会休眠10s(usleep(10000))

还有一部分配置与其他线程共享:

#屏蔽回写时间段(例:0900-1000;1600-1700)
SyncBlockTime=0000-0000
#解除屏蔽回写的脏数据比率
SyncUNBlockPercent=60#回写db的按天日志文件名后缀
DbDayLog=db#是否存在DB,Y/N
DBFlag=Y
#DbAccess的obj名称
ObjName=DCache.TestDbAccessServer.DbAccessObj
SyncBlockTime 屏蔽删除的时间段,在这个时间段内,不执行删除线程;如果有多个时间段,分号”;”分隔
SyncUNBlockPercent 当 脏数据 和 要删除的数据比率大于 SyncUNBlockPercent 时, 解除屏蔽时间(SyncBlockTime失效),正常执行删除
DbDayLog

与db相关的操作,会写到独立的日志文件中,例如:DCache.TestAppSSMMKVCacheServer1-1_db_20191129.log

处理逻辑总结

  1. StartDeleteThread=N,不开启删除线程
  2. 如果在屏蔽时间(SyncBlockTime)段,则不执行删除
  3. 如果在屏蔽时间段内,但脏数据+应删除数据的比率大于 SyncUNBlockPercent 时,也会执行删除操作
  4. 每DeleteInterval秒执行一次删除线程
  5. 如果本周期内 瞬时删除的记录数超过DeleteSpeed,则立即休眠10秒,再执行删除;DeleteSpeed=0时,无此限制
  6. 如果要删除的数据正处于迁移状态,则删除该主key,继续下一条记录
  7. 当该条记录的 deleteTime 不为0,且当前时间大于deleteTime时,才会执行删除
  8. 在DBFlag=Y时,当该记录的mkey在本分片时,只有主节点会执行 删除db中的信息。调用 dbAcess服务(_dbaccessPrx ),删除mysql中的数据
  9. 删除cache内的数据
  10. 删除待清理链表中的主key(earseDeleteKey),继续下一条记录

总结

DCache具备自动清理过期数据的能力,异步流程:

  • 先由过期线程定期轮询,判断数据是否过期;过期的数据就会被设置标识位(此时未删除!)
  • 删除线程会定期获取hash桶中的设置了标识位的数据,之后会调用dbAcess服务清理后端数据库,并清理本地内存和hash桶。

这两个线程都可以灵活配置轮询时间和清理频率(每个批次处理的数据量),除此之外还提供了丰富的配置能力,供开发人员根据业务实际情况进行调整:

  • 当过期的数据量较大时,可以通过调整DeleteInterval和DeleteSpeed,来减轻后端数据库的压力
  • 当业务高峰时,为保证内存的高效处理,可以设置SyncBlockTime参数来屏蔽内存清理行为
  • 当内存压力较大时,可以调整SyncUNBlockPercent参数,来强制删除内存数据。

DCache-CacheServer分析(二)相关推荐

  1. 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

  2. Android4.0图库Gallery2代码分析(二) 数据管理和数据加载

    Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...

  3. 一些有用的javascript实例分析(二)

    一些有用的javascript实例分析(二) 原文:一些有用的javascript实例分析(二) 1 5 求出数组中所有数字的和 2 window.onload = function () 3 { 4 ...

  4. Android 系统(41)---Android7.0 PowerManagerService亮灭屏分析(二)

    Android7.0 PowerManagerService亮灭屏分析(二) 3029 在PowerManagerService中对各种状态进行判断后,将其数值封装进DisplayPowerReque ...

  5. SpringBoot源码分析(二)之自动装配demo

    SpringBoot源码分析(二)之自动装配demo 文章目录 SpringBoot源码分析(二)之自动装配demo 前言 一.创建RedissonTemplate的Maven服务 二.创建测试服务 ...

  6. Linux MMC子系统分析(二)——Host分析

    Linux MMC子系统分析(二)--Host分析 前言 通过前面对mmc子系统的模型分析,我们能够知道host是对应于硬件控制器的具体操作.本文将以sdhci-s3c.c为例对host进行简单的分析 ...

  7. gSOAP 源码分析(二)

    gSOAP 源码分析(二) 2012-5-24 flyfish 一 gSOAP XML介绍 Xml的全称是EXtensible Markup Language.可扩展标记语言.仅仅是一个纯文本.适合用 ...

  8. Android Q 10.1 KeyMaster源码分析(二) - 各家方案的实现

    写在之前 这两篇文章是我2021年3月初看KeyMaster的笔记,本来打算等分析完KeyMaster和KeyStore以后再一起做成一系列贴出来,后来KeyStore的分析中断了,这一系列的文章就变 ...

  9. 威海二职工业机器人专业_工业机器人专业介绍和前景分析二

    原标题:工业机器人专业介绍和前景分析二 人才需求最旺最热门专业-工业机器人技术专业 工业机器人技术专业是经教育部批准成立的热点技术专业,.专业以"国家高职高专精品专业.国家示范高职的重点建设 ...

  10. 【投屏】Scrcpy源码分析二(Client篇-连接阶段)

    Scrcpy源码分析系列 [投屏]Scrcpy源码分析一(编译篇) [投屏]Scrcpy源码分析二(Client篇-连接阶段) [投屏]Scrcpy源码分析三(Client篇-投屏阶段) [投屏]Sc ...

最新文章

  1. 二维几何基础大合集!《计算几何全家桶(一)》(基础运算、点、线、多边形、圆、网格)
  2. python 判断括号是否匹配_使用Python实现一个栈判断括号是否平衡
  3. 写了本机器学习入门书
  4. 为什么Kubernetes从节点会join失败
  5. tpm php,TPM系列
  6. 云原生时代的运维体系进化
  7. [转]让iframe自适应高度-真正解决
  8. 结构型设计模式(2)—— 外观模式(Facade Pattern)
  9. android的scrollview视图内部的子视图中android:layout_height=fill_parent无效的解决办法...
  10. Python安装pyqt4
  11. 驱动开发:BSOD 0x93蓝屏 无效句柄
  12. Python计算斗牛游戏的概率
  13. unity导出fbx模型_美术资源标准(模型篇)
  14. 超详细linux手动配置单网卡和双网卡(bond0和team)以及DNS,linux网络配置详细说明,ps:使用命令配置
  15. 腾讯、百度、讯飞 语音识别
  16. Android开发学习之Intent具体解释
  17. 【python机器学习】普通最小二乘法多元线性回归
  18. MFC框架 afx_msg CComboBox OnDropdown
  19. VS2019_Windows桌面应用程序_01
  20. 在线免费网盘空间统计

热门文章

  1. Swift语言之基本数据类型
  2. Tom Siebel 技术类书籍推荐
  3. C# 窗体加载假死,异步刷新总结
  4. 美国散户从90降到6他们如被灭
  5. 微型计算机继电保护,电力系统微型计算机继电保护.doc
  6. JQuery 动态显示和隐藏(动画)
  7. 重写RecyclerView让其在TV上运行
  8. 【ATTCK】Caldera(一)配置完成的虚拟机镜像及admin身份简单使用
  9. 【4399运维笔试题】
  10. I Love Palindrome String HDU - 6599 回文树+hash