一种基于版本控制的分布式缓存管理方法及管理器技术

技术编号:26170807 阅读:12 留言:0更新日期:2020-10-31 13:40
本发明专利技术公开了一种基于版本控制的分布式缓存管理方法及管理器,所述方法通过使用键值内存数据库实现分布式系统的缓存服务,通过引入版本控制管理缓存的写入和删除,本发明专利技术基于版本控制技术实现的分布式缓存管理器,在使用旁路模式管理数据缓存的基础上,通过引入缓存版本控制的方式,在极少的额外缓存开销和几乎不增加性能开销的前提下,有效地保障了分布式缓存系统的双写一致性,避免了使用旁路模式下分布式缓存系统的缓存数据脏读问题,具有实现简单、高效可靠、支持多种编程语言、支持集成和独立部署多种部署方式的特点,同时针对缓存版本号进行分析可以了解缓存数据被写入更新的频繁程度,可以提高处理写入热数据的针对性。

【技术实现步骤摘要】
一种基于版本控制的分布式缓存管理方法及管理器
本专利技术涉及云计算/云存储系统
,具体提供一种基于版本控制的分布式缓存管理方法及管理器。
技术介绍
缓存技术是一种旨在通过将经常访问的数据临时复制到靠近应用程序的快速存储中来提高系统的性能和可伸缩性的常用技术,主要用于高并发大量读请求的业务场景,近年来被互联网公司广泛应用。缓存技术通常有以下概念:命中:指数据请求从缓存查询到并返回了需要的数据(相反即为未命中);超时:指缓存数据存在的时间达到了系统中设置允许该缓存数据所存在的最大生存时间(TTL,Timetolive);淘汰:指缓存系统根据一定策略将某些缓存数据丢弃(被新数据覆盖);失效:指缓存中的数据因为达到了预设的超时时间被淘汰或者因为缓存系统存储空间达到上限后根据预设的淘汰策略被淘汰;穿透:指查询请求所查询的数据没有命中缓存而改为直接查询持久层的现象;击穿:指大量的查询请求在缓存失效的瞬间直接请求数据库的现象;常见的缓存使用模式主要有以下三种:1.旁路模式(CacheAsidePattern):旁路模式下读请求在缓存未命中后从持久层直接读取数据并回写缓存,写请求直接写入数据到持久层后淘汰缓存。旁路模式的优点是实现简单,缺点是维护应用缓存的服务需要同时维护缓存和持久层,存在“双写一致性”问题。2.直读/直写模式(Read/WriteThroughPattern):直读/直写模式下,读请求在缓存未命中后新开辟一块要使用的缓存并从持久层读取数据到缓存,最后返回要读取的数据;写请求命中缓存时直接更新缓存块,未命中缓存时直接写入数据到持久层。直读/直写模式的优点是只需要维护缓存,缺点是对缓存的可用性要求较高,一旦缓存数据丢失有可能丢失写入,且更新缓存的效率不如直接淘汰后写入高。3.后台写入模式(WriteBehind):后台写入模式下,读请求命中缓存时确认缓存块有值后直接返回要读取的数据,如果未命中缓存,先开辟一块要使用的缓存块,然后执行上述操作;写请求命中缓存时直接写入新数据到缓存块,然后确认缓存块有值,如果未命中缓存则开辟一块要使用的缓存块再执行上述操作。确认缓存块时,如果缓存块有值,则将缓存块之前的值先写回到持久层,再从持久层读取数据到缓存块;如果缓存块没有值,则直接从持久层读取数据到缓存块。后台写入模式的优点是读写数据都只直接操作内存,确认缓存有值的步骤可以异步实现,多次缓存写操作可以合并后再持久化,读写速度快;缺点是数据不是强一致的,缓存中的数据可能丢失,而且实现逻辑比较复杂,需要判断哪些缓存数据需要刷新到持久层,哪些持久层数据需要刷入缓存。缓存技术的核心思想是通过牺牲强一致性来提高性能。相比之下旁路模式较直读/直写模式性能更好,而比后台写入模式实现简单,所以是三种模式下最广泛使用的模式。但是由于要同时维护缓存和持久层,在极端情况下存在“双写一致性”问题。所谓“双写一致性”问题,是指在使用旁路模式缓存模型时,写请求更新持久层并淘汰缓存后,有可能存在之前的读请求因为网络延时问题从持久层读取旧数据后重新更新到缓存导致缓存写入的数据和持久层写入的数据不一致的问题。如图5所示,readrequest和writerequest是请求同一持久化系统的两个并发线程,readrequest先请求缓存数据(R1.request),由于缓存失效而未命中(R2.miss),改为直接请求持久层(R3.request)。正常情况下查询请求会立即返回,但由于某些原因(如网络抖动),请求没有立即返回,而与此同时writerequest先更新了持久层(W1.update),在持久层返回更新完毕后(W2.updated)又清除了缓存中的数据(W3.delete),最后读请求才收到了持久层的返回数据(R4.delayedresponsewitholddata),然后在写请求清除缓存(W4.deleted)后又用之前获得的旧数据覆盖了缓存(R5.updatewitholddata)。当下次读请求时(R7.request),获得的是上次读请求带回的脏数据(R8.responsewithdirtydata),而持久层早在写请求(W1.update)时已经更新,发生了缓存和持久层数据不一致的问题。通常为解决此问题,需要给缓存设置过期时间,当缓存过期后,读请求再次穿透缓存时会从持久层查询到更新后的数据并存入缓存。但是如果缓存过期时间设置太长,会导致脏数据存在时间较长,客户端频繁访问并使用脏数据更新其他数据,引发连锁反应;缓存过期时间设置太短,又会出现缓存频繁击穿甚至雪崩,导致系统性能下降,没有起到缓存预期的作用。所以除了给缓存设置过期时间,传统的做法是使用“延时双删”策略管理分布式缓存。所谓“延时双删”,是指写请求第一次删除缓存数据后在一段时间后再次删除缓存数据,用来清除期间读请求因网络抖动导致返回旧数据较慢引入的脏数据。但是此方法的延时时间不好确定,延时时间过短会导致无法有效清除脏数据(脏数据有可能在第二次删除后引入缓存),延时时间过长则会导致脏数据无法及时清除(在第二次删除缓存前请求到的数据都可能是脏数据)。
技术实现思路
本专利技术的技术任务是针对上述存在的问题,提供一种基于版本控制的分布式缓存管理方法及管理器,通过引入缓存数据键的版本控制,解决旁路模式下缓存和持久层数据可能不一致的问题。为实现上述目的,本专利技术提供了如下技术方案:一种基于版本控制的分布式缓存管理方法,所述方法通过使用键值内存数据库实现分布式系统的缓存服务,通过引入版本控制管理缓存的写入和删除;通过以微小的内存开销,在性能没有显著下降的同时,提高了缓存和持久层的数据一致性。所述方法在接收到读请求查询所请求数据前,先尝试获得缓存版本号,并在缓存未命中时从持久层读取数据后再次尝试获得该实体对象缓存版本号,通过对比两次缓存版本号决定是否更新缓存。所述方法在处理写请求时,先将缓存版本号加1,并更新持久层数据,最后再清除缓存内容。所述缓存版本号的生成过程如下:在接收到写请求更新持久层之前,使用“@”符号拼接被缓存实体的类型名称(表名)及其唯一性标识(主键)作为缓存版本号的键(如:表名@主键),使用计数器生成的自增序列作为版本号的值。所述方法接收读请求后的处理过程包括:在接收读请求后先尝试获取缓存版本号V1,再读取缓存;缓存命中则直接返回缓存数据,缓存未命中时从持久层读取数据,再判断缓存中是否有值;如果缓存有值说明有其他读请求写入了新值,则直接返回新值;如果缓存中没有值则尝试获取缓存版本号V2,并与第一次获得的缓存版本号V1对比:如果两次版本号相同说明读取持久层期间没有新的数据写入,则直接使用从持久层读取的数据更新缓存;否则认为期间有新数据写入并清除了缓存,本次读取的是旧数据,不更新缓存直接返回,留给下次读请求处理。所述方法使用Redis保存缓存版本号,使用Red本文档来自技高网
...

【技术保护点】
1.一种基于版本控制的分布式缓存管理方法,其特征在于,所述方法通过使用键值内存数据库实现分布式系统的缓存服务,通过引入版本控制管理缓存的写入和删除。/n

【技术特征摘要】
1.一种基于版本控制的分布式缓存管理方法,其特征在于,所述方法通过使用键值内存数据库实现分布式系统的缓存服务,通过引入版本控制管理缓存的写入和删除。


2.根据权利要求1所述的一种基于版本控制的分布式缓存管理方法,其特征在于,所述方法在接收读请求后查询要请求的数据前,先获得缓存版本号,并在缓存未命中时从持久层读取数据后再次获得该实体对象缓存版本号,通过对比两次缓存版本号决定是否更新缓存。


3.根据权利要求2所述的一种基于版本控制的分布式缓存管理方法,其特征在于,所述方法在处理写请求时,先将缓存版本号加1,并更新持久层数据,最后再清除缓存内容。


4.根据权利要求2所述的一种基于版本控制的分布式缓存管理方法,其特征在于,所述缓存版本号的生成过程如下:
在接收到写请求更新持久层之前,使用“@”符号拼接被缓存实体的类型名称及其唯一性标识作为缓存版本号的键,使用计数器生成的自增序列作为版本号的值。


5.根据权利要求1-4任一所述的一种基于版本控制的分布式缓存管理方法,其特征在于,所述方法接收读请求后的处理过程包括:
在接收读请求后先尝试获取缓存版本号V1,再读取缓存;
缓存命中则直接返回缓存数据,未获得版本号V1或缓存未命中时直接从持久层读取数据,再判断缓存中是否有值;
如果缓存有值说明有其他读请求写入了新值,则直接返回新值;
如果缓存中没有值则尝试获取缓存版本号V2,并与第一次获得的缓存版本号V1对比:
如果两次版本号相同说明读取持久层期间没有新的数据写入,则直接使用从持久层读取的数...

【专利技术属性】
技术研发人员:刘津赵山许晓笛刘金伟马少博张哲铭王亚楠刘步云
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:山东;37

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1