一种缓存数据库时间跳变感知与数据过期策略自动修复方法与流程
本发明属于分布式缓存数据库,具体涉及一种缓存数据库时间跳变感知与数据过期策略自动修复方法。
背景技术:
1、缓存数据库是现代分布式系统中不可或缺的组件,用于存储热点数据以减轻后端数据库的压力,提高系统响应速度。ttl(time to live,生存时间)是缓存数据库中的核心机制,用于设置键值对(key-value pair)的有效期。当数据超过ttl设定的时间后,系统会自动将其标记为过期并删除。
2、在redis、memcached等主流缓存数据库中,ttl机制通常基于系统时间戳实现。当客户端设置一个带有过期时间的键值对时,服务器会记录当前时间戳加上ttl值作为过期时间点。后台的过期键清理任务会定期扫描,将当前时间戳超过过期时间点的键值对删除。
3、时间跳变是指服务器系统时间发生非连续性的变化,主要包括以下两种情形:
4、(1)时间向前跳变,系统时间被人为或自动调整为未来的某个时间点,例如通过ntp(network time protocol)同步、手动修改系统时间等。
5、(2)时间向后跳变,系统时间被人为或自动调整为过去的某个时间点,例如系统重启后时间重置、ntp同步回拨等。
6、时间跳变会导致缓存数据库中数据的ttl生命周期被延迟、缩短甚至过期,进而引发以下严重问题:
7、(1)缓存击穿。当大量数据因时间前跳而过早过期时,大量请求会直接穿透缓存到达后端数据库,导致数据库压力骤增。
8、(2)缓存雪崩。当大量缓存数据在同一时间点过期,或者因时间跳变导致批量过期时,会引发系统级的缓存失效,造成服务不可用。
9、(3)数据不一致。当时间后跳时,本应过期的数据继续存在,可能导致业务读取到过期或无效数据。
10、现有的缓存数据库实现(如redis、memcached)并未提供针对时间跳变的检测与修复机制。ntp服务虽然可以同步时间,但无法感知和修复因时间跳变导致的ttl异常。一些应用层方案通过在业务代码中添加时间校验逻辑,但这种方式侵入性强、实现复杂,且无法保证所有场景都被覆盖。
技术实现思路
1、发明目的:为解决现有缓存数据库无法感知和修复因时间跳变导致的ttl异常的问题,本发明提出了一种针对缓存数据库在时间跳变场景下的ttl生命周期感知与自动修复方法。
2、技术方案:第一方面,本发明提出了一种缓存数据库时间跳变感知与数据过期策略自动修复方法,包括:
3、当检测到时间跳变,根据配置的主键分片总数n,计算主键 key 所归属的分片索引;
4、按照配置的并发刷新数量启动刷新线程,每个线程每次只对一个分片内的带ttl键值对进行刷新;当前分片刷新完成后,线程自动切换至下一个待处理分片,直至n个分片处理完毕。
5、第二方面,本发明提出了一种缓存数据库时间跳变感知与数据过期策略自动修复方法,包括:
6、在系统启动时,依据配置的主键分片总数 n,创建n个相互独立的分片哈希表;每个所述分片哈希表配置独立的读写锁,锁粒度由全局锁细化为分片级锁;
7、当接收到针对主键key的数据插入或访问请求时,依次执行两层哈希定位:
8、第一层哈希:基于所述主键key的哈希值,确定所述主键key所归属的目标分片哈希表;
9、第二层哈希:在所述目标分片哈希表内部,基于所述主键key的哈希值,确定所述主键key在所述目标分片哈希表中的桶内存储位置;
10、在定位完成后,仅获取并持有所述目标分片哈希表对应的读写锁,以完成所述数据插入或访问操作;
11、当检测到系统时间跳变时,依据配置的并发刷新数量m启动m个刷新线程,m为大于等于1且小于等于n的整数;
12、每个所述刷新线程每次仅对一个分片哈希表内带ttl的键值对执行刷新操作,在执行所述刷新操作期间仅持有该分片哈希表对应的读写锁;
13、当前分片哈希表刷新完成后,所述刷新线程自动切换至下一个待处理分片哈希表,直至n个分片哈希表全部处理完毕。
14、进一步的,按照以下公式确定主键 key 所归属的目标分片哈希表:
15、shard = hash(key) % n
16、其中,hash(key) 表示对主键 key 计算其哈希值;n 为主键分片总数;shard表示主键 key 所归属的分片哈希表。
17、进一步的,主键key在所述目标分片哈希表中的桶内存储位置=hash'(key) % m,式中,m为分片哈希表的桶数量。
18、进一步的,按照以下步骤检测时间跳变,包括:
19、在检测周期开始时,记录当前系统时间戳t1;
20、按照预设的检测间隔进入休眠状态;
21、休眠结束后,获取当前系统时间戳t2;
22、计算预期时间戳t2' = t1 + interval,其中,interval表示检测间隔;
23、计算时间误差 delta = |t2 - t2'|,将所述时间误差与预设阈值进行比较;若delta <= 预设阈值,判定系统时间正常;若 delta > 预设阈值,判定发生跳变。
24、进一步的,集成到缓存数据库进程中,作为缓存数据库的一个内部组件运行,通过redis协议与缓存数据库进行通信。
25、进一步的,作为缓存数据库外部进程部署,通过redis协议与缓存数据库进行通信。
26、第三方面,本发明提出了一种电子设备,所述电子设备包括:
27、至少一个处理器;
28、以及与所述至少一个处理器通信连接的存储器;
29、其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行一种缓存数据库时间跳变感知与数据过期策略自动修复方法。
30、第四方面,本发明提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现一种缓存数据库时间跳变感知与数据过期策略自动修复方法。
31、第五方面,本发明提出了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序在被处理器执行时实现一种缓存数据库时间跳变感知与数据过期策略自动修复方法。
32、有益效果:与现有技术相比,本发明具有以下优点:
33、(1)本发明能够有效防止因时间跳变导致的缓存击穿和缓存雪崩,保障系统在高并发场景下的稳定性和可用性。
34、(2)本发明通过动态定时检测机制,能够准确识别时间前跳和后跳两种跳变类型,检测精度可通过阈值参数灵活配置。
35、(3)本发明实现简单,无需修改业务代码,仅需在缓存数据库层面部署检测与修复模块即可生效。
36、(4)本发明适用于各类基于ttl机制的缓存数据库系统,包括redis、memcached等主流产品。
37、(5)用户可根据业务需求自定义检测时间间隔、跳变阈值、并发刷新数量等参数,实现精细化的控制。
38、(6)哈希分片策略支持水平扩展,可根据数据规模灵活调整分片数量,适应不同规模的缓存集群。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com