DCache-CacheServer分析(二)
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 |
处理逻辑总结
- StartDeleteThread=N,不开启删除线程
- 如果在屏蔽时间(SyncBlockTime)段,则不执行删除
- 如果在屏蔽时间段内,但脏数据+应删除数据的比率大于 SyncUNBlockPercent 时,也会执行删除操作
- 每DeleteInterval秒执行一次删除线程
- 如果本周期内 瞬时删除的记录数超过DeleteSpeed,则立即休眠10秒,再执行删除;DeleteSpeed=0时,无此限制
- 如果要删除的数据正处于迁移状态,则删除该主key,继续下一条记录
- 当该条记录的 deleteTime 不为0,且当前时间大于deleteTime时,才会执行删除
- 在DBFlag=Y时,当该记录的mkey在本分片时,只有主节点会执行 删除db中的信息。调用 dbAcess服务(_dbaccessPrx ),删除mysql中的数据
- 删除cache内的数据
- 删除待清理链表中的主key(earseDeleteKey),继续下一条记录
总结
DCache具备自动清理过期数据的能力,异步流程:
- 先由过期线程定期轮询,判断数据是否过期;过期的数据就会被设置标识位(此时未删除!)
- 删除线程会定期获取hash桶中的设置了标识位的数据,之后会调用dbAcess服务清理后端数据库,并清理本地内存和hash桶。
这两个线程都可以灵活配置轮询时间和清理频率(每个批次处理的数据量),除此之外还提供了丰富的配置能力,供开发人员根据业务实际情况进行调整:
- 当过期的数据量较大时,可以通过调整DeleteInterval和DeleteSpeed,来减轻后端数据库的压力
- 当业务高峰时,为保证内存的高效处理,可以设置SyncBlockTime参数来屏蔽内存清理行为
- 当内存压力较大时,可以调整SyncUNBlockPercent参数,来强制删除内存数据。
DCache-CacheServer分析(二)相关推荐
- 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )
Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...
- Android4.0图库Gallery2代码分析(二) 数据管理和数据加载
Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...
- 一些有用的javascript实例分析(二)
一些有用的javascript实例分析(二) 原文:一些有用的javascript实例分析(二) 1 5 求出数组中所有数字的和 2 window.onload = function () 3 { 4 ...
- Android 系统(41)---Android7.0 PowerManagerService亮灭屏分析(二)
Android7.0 PowerManagerService亮灭屏分析(二) 3029 在PowerManagerService中对各种状态进行判断后,将其数值封装进DisplayPowerReque ...
- SpringBoot源码分析(二)之自动装配demo
SpringBoot源码分析(二)之自动装配demo 文章目录 SpringBoot源码分析(二)之自动装配demo 前言 一.创建RedissonTemplate的Maven服务 二.创建测试服务 ...
- Linux MMC子系统分析(二)——Host分析
Linux MMC子系统分析(二)--Host分析 前言 通过前面对mmc子系统的模型分析,我们能够知道host是对应于硬件控制器的具体操作.本文将以sdhci-s3c.c为例对host进行简单的分析 ...
- gSOAP 源码分析(二)
gSOAP 源码分析(二) 2012-5-24 flyfish 一 gSOAP XML介绍 Xml的全称是EXtensible Markup Language.可扩展标记语言.仅仅是一个纯文本.适合用 ...
- Android Q 10.1 KeyMaster源码分析(二) - 各家方案的实现
写在之前 这两篇文章是我2021年3月初看KeyMaster的笔记,本来打算等分析完KeyMaster和KeyStore以后再一起做成一系列贴出来,后来KeyStore的分析中断了,这一系列的文章就变 ...
- 威海二职工业机器人专业_工业机器人专业介绍和前景分析二
原标题:工业机器人专业介绍和前景分析二 人才需求最旺最热门专业-工业机器人技术专业 工业机器人技术专业是经教育部批准成立的热点技术专业,.专业以"国家高职高专精品专业.国家示范高职的重点建设 ...
- 【投屏】Scrcpy源码分析二(Client篇-连接阶段)
Scrcpy源码分析系列 [投屏]Scrcpy源码分析一(编译篇) [投屏]Scrcpy源码分析二(Client篇-连接阶段) [投屏]Scrcpy源码分析三(Client篇-投屏阶段) [投屏]Sc ...
最新文章
- 二维几何基础大合集!《计算几何全家桶(一)》(基础运算、点、线、多边形、圆、网格)
- python 判断括号是否匹配_使用Python实现一个栈判断括号是否平衡
- 写了本机器学习入门书
- 为什么Kubernetes从节点会join失败
- tpm php,TPM系列
- 云原生时代的运维体系进化
- [转]让iframe自适应高度-真正解决
- 结构型设计模式(2)—— 外观模式(Facade Pattern)
- android的scrollview视图内部的子视图中android:layout_height=fill_parent无效的解决办法...
- Python安装pyqt4
- 驱动开发:BSOD 0x93蓝屏 无效句柄
- Python计算斗牛游戏的概率
- unity导出fbx模型_美术资源标准(模型篇)
- 超详细linux手动配置单网卡和双网卡(bond0和team)以及DNS,linux网络配置详细说明,ps:使用命令配置
- 腾讯、百度、讯飞 语音识别
- Android开发学习之Intent具体解释
- 【python机器学习】普通最小二乘法多元线性回归
- MFC框架 afx_msg CComboBox OnDropdown
- VS2019_Windows桌面应用程序_01
- 在线免费网盘空间统计