CN115878666A - 一种缓存依赖关系的管理方法、系统、电子设备及介质 - Google Patents
一种缓存依赖关系的管理方法、系统、电子设备及介质 Download PDFInfo
- Publication number
- CN115878666A CN115878666A CN202211345098.5A CN202211345098A CN115878666A CN 115878666 A CN115878666 A CN 115878666A CN 202211345098 A CN202211345098 A CN 202211345098A CN 115878666 A CN115878666 A CN 115878666A
- Authority
- CN
- China
- Prior art keywords
- cache
- channel
- data
- updating
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及缓存管理领域,公开了一种缓存依赖关系的管理方法、系统、电子设备及介质,S1、以注解的方式分别描述读取程序和/或更新程序所涉及的频道及数据对象,并根据相同频道原则,将读取程序读取的数据对象所建立并使用的缓存对象和更新程序建立一一对应的依赖关系;S2、在通过S1建立的依赖关系进行数据对象的读取或更新时对缓存对象进行刷新,并实时监控缓存运行的关键信息。本发明通过注解告知缓存管理器读取程序本身所涉及的数据对象以及该数据对象对应的频道,缓存管理器将这些数据对象以及该数据对象对应的频道的信息进行整合,并建立依赖关系,当一个数据对象发生数据变更时,通过更新程序对应的频道自动刷新依赖该频道的缓存对象。
Description
技术领域
本发明涉及缓存管理领域,具体涉及一种缓存依赖关系的管理方法、系统、电子设备及介质。
背景技术
应用系统通常会使用缓存技术来提升系统的性能,其原理是在从数据库访问数据前,先检查数据是否在缓存中存在,若存在就直接访问,若不存在再从数据库中读取数据并保存在缓存中,以此减少对数据库的直接访问,提升系统性能。缓存的实现技术也很多,包括redis、memcached、ehcache等,但是他们都只是作为缓存的存储工具,而没有实现对缓存的细致化管理。
在大型应用系统使用缓存时常常会遇到缓存的依赖问题,比如一个数据缓存X涉及到了A、B、C、D四个数据对象,那么当其中任意一个数据对象的数据发生变更时,都应当及时的刷新或清除X缓存,保持数据与缓存的一致性。随着项目代码的不断迭代应用代码中A、B、C、D数据对象在何时会变更、在哪些代码中会变更、变更会对哪些数据缓存产生影响会变得越来越难以管理,目前还没有简单有效的处理办法。
发明内容
本发明提供一种缓存依赖关系的管理方法、系统、电子设备及介质,实现了对缓存的精细化管理,业务代码只需关注自身操作了哪些数据对象,由缓存管理器分析出其中的依赖关系,自动管理缓存,减少脏数据的产生,保证数据一致性。相较于传统解决方案,本发明创新性的引入了“频道”这一概念,用户无需了解数据对象间的详细关系,只需了解大致关系即可将数据归属到若干个“频道”中,缓存管理器自动对“频道”中数据对象的依赖关系进行管理,大大的降低了缓存依赖关系管理的难度。
本发明通过下述技术方案实现:
一种缓存依赖关系的管理方法,包括如下步骤:
S1、以注解的方式分别描述读取程序和/或更新程序所涉及的频道及数据对象,并根据相同频道原则,将读取程序读取的数据对象所建立并使用的缓存对象和更新程序建立一一对应的“表名-频道-缓存对象”的依赖关系,其中,表名为数据对象所存在的数据表中的名称;
S2、在通过S1建立的依赖关系进行数据对象的读取或更新时对缓存对象进行刷新,并实时监控缓存运行的关键信息。
作为优化,S1的具体步骤为:
S1.1、以注解的方式添加频道至读取程序中,用以描述所述读取程序所涉及的至少一个读取频道以及至少一个读取频道对应的数据对象,建立数据对象与频道的关系链路,表示为“表名-频道”;
S1.2、将所述读取程序对应的数据对象存入缓存管理器中,并根据至少一个所述读取频道对应生成至少一个缓存对象,建立“频道-缓存对象”的关系链路,且一个所述读取程序对应一个缓存对象组;
S1.3、以注解的方式添加更新频道至更新程序中,用以描述所述更新程序所涉及的至少一个更新频道;
S1.4、利用AOP的方法监听带有注解的读取程序和更新程序,根据相同频道原则,将拥有与某一缓存对象的读取频道相同的更新频道所对应的更新程序与该缓存对象建立一一对应的“表名-频道-缓存对象”的依赖关系,当更新程序触发时,数据表内的数据进行更新时,自动更新对应的缓存对象。
作为优化,所述缓存运行的关键信息包括查询执行数、缓存命中数、缓存命中率、缓存存活时间、刷新频率、频道/缓存/方法依赖关系。
本发明还公开了一种缓存依赖关系的管理系统,用于实现上述的管理方法,包括:
缓存管理包,用于以注解的方式分别描述读取程序和/或更新程序所涉及的频道及数据对象,并根据相同频道原则,将读取程序读取的数据对象所建立的缓存对象和更新程序建立一一对应的“表名-频道-缓存对象”的依赖关系,其中,表名为数据对象所存在的数据表中的名称;
缓存监控包,在通过建立的依赖关系进行数据对象的读取或更新时对缓存对象进行刷新时实时监控缓存运行的关键信息,且在缓存监控包的可视界面中能看到所有频道以及频道下的缓存对象,在所述缓存对象上可以执行更新操作;
Redis集成实现包,用于通过ICacheTemplate与Redis缓存存储技术对接,将数据存储在redis中;
Mybatis集成工具包,用于实现Mybatis拦截器接口,监听所有数据更新的操作。
作为优化,所述缓存管理包包括:
缓存模块Cache,用于以注解的方式添加频道至读取程序中,用以描述所述读取程序所涉及的至少一个读取频道以及数据对象,建立数据对象与频道的关系链路,表示为“表名-频道”,并将读取程序对应的数据对象存入缓存管理器中,并根据至少一个所述读取频道对应生成至少一个缓存对象,建立“频道-缓存对象”的关系链路;
更新模块Flush,用于以注解的方式添加更新频道至更新程序中,用以描述所述更新程序所涉及的至少一个更新频道,且所述更新模块Flush每次被执行时记录执行时间、产生更新行为的方法签名,以此识别短期内的多次批量操作;
依赖关系建立模块CoyeeCacheSupportAspect,用于利用AOP的方法监听带有注解的读取程序和更新程序,根据相同频道原则,将拥有与某一缓存对象的读取频道相同的更新频道所对应的更新程序与该缓存对象建立一一对应的“表名-频道-缓存对象”的依赖关系,数据表内的数据进行更新时,自动更新对应的缓存对象;
缓存存储接口模块ICacheTemplate,用于对接各类缓存存储技术的具体实现,实现缓存的存取。
防止“缓存击穿”模块HotCacheKeeper,若@Cache标签(缓存模块Cache)中hot属性开启缓存管理器将在生成缓存对象时记录生成缓存时的参数并监听该缓存对象的过期和移除事件,在事件发生时根据所记录的生成参数重新生成缓存,用于保持极热点缓存数据对象始终存在且与实际数据保持一致性;
防止系统初始化阶段被“缓存穿透”模块HotCacheInitializer,用于在系统初始化时将实际数据提前加载入缓存,防止系统初始化完成后热点数据没有缓存来缓冲,导致大量请求直接造成数据库访问或服务接口访问,产生“缓存穿透”现象导致系统崩溃;
租户隔离模块,适用于同一个系统中存在多个相互独立的组织(例如多个公司同时使用一套SAAS化部署的OA系统,每个公司都是OA系统中的独立组织,数据互相隔离),若在@Cache标签中(缓存模块Cache)配置rentId属性来标识产生的缓存对象属于哪个组织,一个组织触发了某个频道的缓存刷新事件时缓存管理器会计算出当前操作属于哪个组织,从而只会刷新本组织的频道而不会对其它组织产生影响;
统计模块,用于计算缓存对象从产生开始的所有事件(包括缓存生成、缓存读取、缓存过期、缓存移除等),计算缓存对象在生命周期(从缓存产生到缓存过期或移除)内所产生的价值和影响:
价值=[(读取缓存总用时)-(移除缓存用时总用时)]/(生成缓存平均用时*缓存读取次数)
影响=(生成缓存平均用时*缓存读取次数)/缓存更新造成其它关联缓存对象(除该缓存对象以外的缓存对象)更新用时
给出合理的优化建议,所述优化建议包括:
若缓存对象的价值高于第一阈值而价值与缓存过期时间的比值低于所有缓存对象的价值与缓存过期时间比值的平均值,则建议延长过期时间,反之减少过期时间;
若缓存对象的影响值高于第二阈值,则建议移除对依赖的数据对象的影响;
若缓存对象的生成时间过长,则会建议优化生成缓存对象的方法。
作为优化,在所述缓存模块Cache中可以设置缓存的索引关键字生成方式、缓存关联的频道、缓存过期时间、获取数据方法执行前后的回调函数。
作为优化,在所述更新模块Flush可以设置关联频道、执行缓存刷新的时机。
作为优化,在所述依赖关系建立模块CoyeeCacheSupportAspect中,可以设置缓存存储位置、最小刷新频率、启用调试模式。
本发明还公开了一种电子设备,包括至少一个处理器,以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上述的一种缓存依赖关系的管理方法。
本发明还公开了一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述的一种缓存依赖关系的管理方法。
本发明与现有技术相比,具有如下的优点和有益效果:
本发明通过注解告知缓存管理器读取程序本身所涉及的数据对象以及该数据对象对应的频道,缓存管理器将这些数据对象以及该数据对象对应的频道的信息进行整合,并根据频道建立更新程序与缓存对象之间的依赖关系,当一个数据对象发生数据变更时,即触发设定的更新程序进行更新,通过更新程序对应的频道自动刷新依赖该频道的缓存对象;相较于传统解决方案,本发明创新性的引入了“频道”这一概念,用户无需了解数据对象间的详细关系,只需了解大致关系即可将数据归属到若干个“频道”中,缓存管理器自动对“频道”中数据对象的依赖关系进行管理,大大的降低了缓存依赖关系管理的难度。
本发明通过执行时间和方法签名,缓存管理包的更新缓存方法每次被执行时都会记录执行时间、产生更新行为的方法签名,以此识别短期内的多次批量操作,识别对同一个数据对象的批量更新,批量更新同一个数据对象时只会更新一次缓存,减少性能消耗;
本发明包含了一个AOP的轻量级实现,能够在业务方法执行前后嵌入业务代码实现动态数据和静态数据的结合。
附图说明
为了更清楚地说明本发明示例性实施方式的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。在附图中:
图1为一种缓存依赖关系的管理方法的实施示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
实施例1
一种缓存依赖关系的管理方法,包括如下步骤:
S1、以注解的方式分别描述读取程序和/或更新程序所涉及的频道及数据对象,并根据相同频道原则,将读取程序读取的数据对象所建立并使用的缓存对象和更新程序建立一一对应的依赖关系;
具体的,本实施例中,S1的具体步骤为:
S1.1、以注解的方式添加频道至读取程序中,用以描述所述读取程序所涉及的至少一个读取频道以及至少一个读取频道对应的数据对象,建立数据对象与频道的关系链路,表示为“表名-频道”;
S1.2、将所述读取程序对应的数据对象存入缓存管理器中,并根据至少一个所述读取频道对应生成至少一个缓存对象,建立“频道-缓存对象”的关系链路,且一个所述读取程序对应一个缓存对象组;
如图1所示,添加频道A和频道B至读取程序(图1为读取数据方法)1中:
@Cache(channels={“频道A”,“频道B”});
添加频道B至读取程序2中:
@Cache(channels={“频道B”})。
S1.3、以注解的方式添加更新频道至更新程序中,用以描述所述更新程序所涉及的至少一个更新频道;
如图1所示,添加频道A至更新程序(图1为更新方法)A中:
@Flush(channels={“频道A”});
添加频道B至更新程序B中:
@Flush(channels={“频道B”});
S1.4、利用AOP的方法监听带有注解的读取程序和更新程序,根据相同频道原则,将拥有与某一缓存对象的读取频道相同的更新频道所对应的更新程序与该缓存对象建立一一对应的“表名-频道-缓存对象”的依赖关系,当更新程序触发时,数据表内的数据进行更新时,自动更新对应的缓存对象。
S2、在通过S1建立的依赖关系进行数据对象的读取或更新时对缓存对象进行刷新,并实时监控缓存运行的关键信息。本实施例中,所述缓存运行的关键信息包括查询执行数、缓存命中数、缓存命中率、缓存存活时间、刷新频率、频道/缓存/方法依赖关系。
如图1所示,左侧“读取数据方法1”(即读取程序1)以注解的形式标明了该方法的数据对象与“频道A”和“频道B”都有关,“读取数据方法2”(即读取程序2)以注解的形式标明了该方法的数据对象与“频道A”有关;右侧“更新方法A”以注解的方式标明了该方法更新会影响到“频道A”的数据对象,“更新方法B”以注解的方式标明了该方法的更新会影响到“频道B”的数据对象。
若“读取数据方法1”产生了“缓存对象1-*”,因为该方法(“读取数据方法1”)的数据对象与“频道A”、“频道B”都相关,则数据集合“缓存对象1-*”同时被“频道A”、“频道B”引用,“更新方法A”、“更新方法B”的调用都会使“缓存对象1-*”被刷新。
若“读取数据方法2”产生了“缓存对象2-*”,因为该方法(“读取数据方法2”)的数据与“频道B”相关,则数据集合“缓存对象2-*”被“频道B”引用,“更新方法B”、的调用都会使“缓存对象2-*”被刷新。
注:“缓存对象1-*”是指“读取数据方法1”产生的若干个数据对象的集合,即缓存对象组1;“缓存对象2-*”是指“读取数据方法2”产生的若干个数据对象的集合,即缓存对象组2。
实施例2
本发明还公开了一种缓存依赖关系的管理系统,用于实现上述的管理方法,包括:
缓存管理包,用于以注解的方式分别描述读取程序和/或更新程序所涉及的频道及数据对象,并根据相同频道原则,将读取程序读取的数据对象所建立的缓存对象和更新程序建立一一对应的“表名-频道-缓存对象”的依赖关系,其中,表名为数据对象所存在的数据表中的名称。
本实施例中,所述缓存管理包包括:
缓存模块Cache,用于以注解的方式添加频道至读取程序中,用以描述所述读取程序所涉及的至少一个读取频道以及数据对象,建立数据对象与频道的关系链路,表示为“表名-频道”,并将读取程序对应的数据对象存入缓存管理器中,并根据至少一个所述读取频道对应生成至少一个缓存对象,建立“频道-缓存对象”的关系链路,同一个读取程序对应的若干缓存对象组成一个缓存对象组;可以设置缓存的索引关键字生成方式、缓存关联的频道、缓存过期时间、获取数据方法执行前后的回调函数等。
具体代码可以如下:
更新模块Flush,用于以注解的方式添加更新频道至更新程序中,用以描述所述更新程序所涉及的至少一个更新频道,且所述更新模块Flush每次被执行时记录执行时间、产生更新行为的方法签名,以此识别短期内的多次批量操作;其主要属性包含了关联频道、执行缓存刷新的时机等;
具体代码可以如下:
依赖关系建立模块CoyeeCacheSupportAspect,用于利用AOP的方法监听带有注解的读取程序和更新程序,根据相同频道原则,将拥有与某一缓存对象的读取频道相同的更新频道所对应的更新程序与该缓存对象建立一一对应的“表名-频道-缓存对象”的依赖关系,数据表内的数据进行更新时,自动更新对应的缓存对象;将缓存模块Cache标记的使用缓存的方法与更新模块Flush标记的更新缓存的方法依照“频道”建立依赖关系,即一个“频道”关联了若干个更新方法和多个缓存对象(组),当更新方法更新了数据对象,通过对应的频道缓存对象也随之更新。依赖关系建立模块CoyeeCacheSupportAspect主要包含了根据频道刷新缓存、生成缓存索引关键字等方法,还包含了设置缓存存储位置、最小刷新频率、启用调试模式等属性。
代码可以参考如下:
缓存存储接口模块ICacheTemplate,用于对接各类缓存存储技术的具体实现,实现缓存的存取。主要包括根据索引关键字获取缓存数据、根据频道刷新缓存、设置缓存对象到指定频道等接口方法。
代码可以参考如下:
防止“缓存击穿”模块HotCacheKeeper,若@Cache标签(缓存模块Cache)中hot属性开启缓存管理器将在生成缓存对象时记录生成缓存时的参数并监听该缓存对象的过期和移除事件,在事件发生时根据所记录的生成参数重新生成缓存,用于保持极热点缓存数据对象始终存在且与实际数据保持一致性;
防止系统初始化阶段被“缓存穿透”模块HotCacheInitializer,用于在系统初始化时将实际数据提前加载入缓存,防止系统初始化完成后热点数据没有缓存来缓冲,导致大量请求直接造成数据库访问或服务接口访问,产生“缓存穿透”现象导致系统崩溃;
租户隔离模块,适用于同一个系统中存在多个相互独立的组织(例如多个公司同时使用一套SAAS化部署的OA系统,每个公司都是OA系统中的独立组织,数据互相隔离),若在@Cache标签中(缓存模块Cache)配置rentId属性来标识产生的缓存对象属于哪个组织,一个组织触发了某个频道的缓存刷新事件时缓存管理器会计算出当前操作属于哪个组织,从而只会刷新本组织的频道而不会对其它组织产生影响;
统计模块,用于计算缓存对象从产生开始的所有事件(包括缓存生成、缓存读取、缓存过期、缓存移除等),计算缓存对象在生命周期(从缓存产生到缓存过期或移除)内所产生的价值和影响:
价值=[(读取缓存总用时)-(移除缓存用时总用时)]/(生成缓存平均用时*缓存读取次数)
影响=(生成缓存平均用时*缓存读取次数)/缓存更新造成其它关联缓存对象(除该缓存对象以外的缓存对象)更新用时
给出合理的优化建议,所述优化建议包括:
若缓存对象的价值高于第一阈值而价值与缓存过期时间的比值低于所有缓存对象的价值与缓存过期时间比值的平均值,则建议延长过期时间,反之减少过期时间;
若缓存对象的影响值高于第二阈值,则建议移除对依赖的数据对象的影响;
若缓存对象的生成时间高于第三阈值,则会建议优化生成缓存对象的方法。
第一阈值和第二阈值可以根据实际情况来设定,这里就不再赘述了。
缓存监控包,在通过建立的依赖关系进行数据的读取或更新时对缓存对象进行刷新时实时监控缓存运行的关键信息;用于缓存监控的控制台程序,具体的,监控查询执行数、缓存命中数、缓存命中率、缓存存活时间、刷新频率、频道/缓存/方法依赖关系等系统运行关键信息,为系统优化提供数据支撑,同时提供手动操作缓存对象的功能(此为缓存监控包中提供的可视化的操作界面,可以看到所有频道以及频道下的缓存对象,在缓存对象上可以执行更新操作)。
Redis集成实现包,用于通过ICacheTemplate(ICacheTemplate是缓存管理包提供的与存储技术对接的标准接口类,redis集成实现包实现了此接口与redis对接)与Redis缓存存储技术对接,将数据存储在redis中;在更新数据对象的操作中实现严格事务一致性模式和一般模式,严格事务一致性模式利用redis的multi命令开启事务,将更新数据对象的所有操作步骤都放到一个事务中确保同时成功同时失败;同时利用redis创建分布式锁,保证同一时间只有一个线程对同一个频道进行操作,进一步保证数据一致。
Mybatis集成工具包,用于实现Mybatis拦截器接口,监听所有数据更新的操作。用户在使用缓存管理包时只需要配置数据表(数据对象)与“频道”的关系,同时在使用缓存的方法(读取方法)上注明该方法所涉及到的“频道”,缓存管理包就可以自动的管理缓存的创建与更新(一条SQL可以提取出数据表的表名,缓存管理包中记录了表名对应的频道,通过频道可以获得频道关联的缓存对象,当一条更新SQL(更新程序)执行时,就会自动刷新这条SQL所影响的缓存对象),而无须在每个数据更新方法上都注明关联的“频道”(更新模块Flush建立起了更新方法与频道-缓存对象的关系,但是遇到代码历史太久远的情况时往往不能把每个数据更新的方法都准确的打上@Flush注解,Mybatis集成工具包会从更底层监控所有的更新操作,建立“表名-频道-缓存对象”的依赖关系,降低加注解的难度和漏加注解的可能性),以此代替更新模块Flush注解降低加注解的难度。
以一个springboot工程为例,要集成缓存管理器需要以下步骤:
业务工程中引入coyee-cache-core包。若工程中使用redis作为缓存存储,则需引coyee-cache-redis;若工程中使用mybatis作为持久化工具,建议引入coyee-cache-mybatis简化缓存管理配置工作。
在工程中添加如下配置代码:
在方法中添加管理缓存的注解代码,如下:
####使用缓存(读取程序)
//代表该方法返回的数据对象设计A,B,C三张表
@Cache(channels={“A”,“B”,“C”})
public R<IPage<Info>>paging(InfoDTO info,Query query);
####更新缓存(更新程序)
//代表该方法会更新C表的数据,引用C表数据的所有缓存将会更新
@Flush(channels={“A”})
public R save(@Valid@RequestBody Info info);
完成以上步骤,即可将缓存依赖管理器的AOP拦截方法加入到数据访问的流程中,缓存管理器在流程中利用缓存模块Cache注解标识方法与“频道”(即A、B、C)的关系,当该读取程序有新的数据产生时,由于,读取模块Cache注解中通过channels参数标识了读取程序产生的数据对象与频道的关系,因此,会自动将数据存储到对应的“频道”下(数据表中);利用更新模块Flush注解所标识的更新方法与“频道”的关系进一步分析得出更新方法与缓存对象的关系,当更新方法(更新程序)触发时,自动缓存相应的缓存对象。
实施例3
本发明还公开了一种电子设备,包括至少一个处理器,以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上述的一种缓存依赖关系的管理方法。
实施例4
本发明还公开了一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述的一种缓存依赖关系的管理方法。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种缓存依赖关系的管理方法,其特征在于,包括如下步骤:
S1、以注解的方式分别描述读取程序和/或更新程序所涉及的频道及数据对象,并根据相同频道原则,将读取程序读取的数据对象所建立并使用的缓存对象和更新程序建立一一对应的“表名-频道-缓存对象”的依赖关系,其中,表名为数据对象所存在的数据表中的名称;
S2、在通过S1建立的依赖关系进行数据对象的读取或更新时对缓存对象进行刷新,并实时监控缓存运行的关键信息。
2.根据权利要求1所述的一种缓存依赖关系的管理方法,其特征在于,S1的具体步骤为:
S1.1、以注解的方式添加频道至读取程序中,用以描述所述读取程序所涉及的至少一个读取频道以及至少一个读取频道对应的数据对象,建立数据对象与频道的关系链路,表示为“表名-频道”;
S1.2、将所述读取程序对应的数据对象存入缓存管理器中,并根据至少一个所述读取频道对应生成至少一个缓存对象,建立“频道-缓存对象”的关系链路,且一个所述读取程序对应一个缓存对象组;
S1.3、以注解的方式添加更新频道至更新程序中,用以描述所述更新程序所涉及的至少一个更新频道;
S1.4、利用AOP的方法监听带有注解的读取程序和更新程序,根据相同频道原则,将拥有与某一缓存对象的读取频道相同的更新频道所对应的更新程序与该缓存对象建立一一对应的“表名-频道-缓存对象”的依赖关系,当更新程序触发时,数据表内的数据进行更新时,自动更新对应的缓存对象。
3.根据权利要求1所述的一种缓存依赖关系的管理方法,其特征在于,所述缓存运行的关键信息包括查询执行数、缓存命中数、缓存命中率、缓存存活时间、刷新频率、频道/缓存/方法依赖关系。
4.一种缓存依赖关系的管理系统,用于实现权利要求1-3任一所述的管理方法,其特征在于,包括:
缓存管理包,用于以注解的方式分别描述读取程序和/或更新程序所涉及的频道及数据对象,并根据相同频道原则,将读取程序读取的数据对象所建立的缓存对象和更新程序建立一一对应的“表名-频道-缓存对象”的依赖关系,其中,表名为数据对象所存在的数据表中的名称;
缓存监控包,在通过建立的依赖关系进行数据对象的读取或更新时对缓存对象进行刷新时实时监控缓存运行的关键信息,且在缓存监控包的可视界面中能看到所有频道以及频道下的缓存对象,在所述缓存对象上可以执行更新操作;
Redis集成实现包,用于通过缓存管理包提供的接口ICacheTemplate与Redis缓存存储技术对接,将数据存储在redis中;
Mybatis集成工具包,用于实现Mybatis拦截器接口,监听所有数据更新的操作。
5.根据权利要求4所述的一种缓存依赖关系的管理系统,其特征在于,所述缓存管理包包括:
缓存模块Cache,用于以注解的方式添加频道至读取程序中,用以描述所述读取程序所涉及的至少一个读取频道以及数据对象,建立数据对象与频道的关系链路,表示为“表名-频道”,并将读取程序对应的数据对象存入缓存管理器中,并根据至少一个所述读取频道对应生成至少一个缓存对象,建立“频道-缓存对象”的关系链路;
更新模块Flush,用于以注解的方式添加更新频道至更新程序中,用以描述所述更新程序所涉及的至少一个更新频道,且所述更新模块Flush每次被执行时记录执行时间、产生更新行为的方法签名,以此识别短期内的多次批量操作;
依赖关系建立模块CoyeeCacheSupportAspect,用于利用AOP的方法监听带有注解的读取程序和更新程序,根据相同频道原则,将拥有与某一缓存对象的读取频道相同的更新频道所对应的更新程序与该缓存对象建立一一对应的“表名-频道-缓存对象”的依赖关系,数据表内的数据进行更新时,自动更新对应的缓存对象;
缓存存储接口模块ICacheTemplate,用于对接各类缓存存储技术的具体实现,实现缓存的存取;
防止“缓存击穿”模块HotCacheKeeper,若所述缓存模块Cache中hot属性开启缓存管理器,在生成缓存对象时记录生成缓存对象时的参数并监听该缓存对象的过期和移除事件,在事件发生时根据所记录的生成参数重新生成缓存,用于保持极热点缓存数据对象始终存在且与实际数据保持一致性;
防止系统初始化阶段被“缓存穿透”模块HotCacheInitializer,用于在系统初始化时将实际数据提前加载入缓存管理器,防止系统初始化完成后热点数据没有缓存来缓冲,导致大量请求直接造成数据库访问或服务接口访问,产生“缓存穿透”现象导致系统崩溃;
租户隔离模块,适用于同一个系统中存在多个相互独立的组织,当一个组织触发了某个频道的缓存刷新事件时,通过所述租户隔离模块只会刷新本组织对应的频道而不会对除该组织以外的组织产生影响;
统计模块,用于计算缓存对象从产生开始的所有事件,所有事件包括缓存生成、缓存读取、缓存过期、缓存移除,计算缓存对象在生命周期内所产生的价值和影响,并给出合理的优化建议,所述优化建议包括:
若缓存对象的价值高于第一阈值而价值与缓存过期时间的比值低于所有缓存对象的价值与缓存过期时间比值的平均值,则建议延长过期时间,反之减少过期时间;
若缓存对象的影响值高于第二阈值,则建议移除对依赖的数据对象的影响;
若缓存对象的生成时间高于第三阈值,则建议优化生成缓存对象的方法;
其中,价值=[(读取缓存总用时)-(移除缓存用时总用时)]/(生成缓存平均用时*缓存读取次数);
影响=(生成缓存平均用时*缓存读取次数)/缓存更新造成其它关联缓存对象更新用时。
6.根据权利要求5所述的一种缓存依赖关系的管理系统,其特征在于,在所述缓存模块Cache中可以设置缓存的索引关键字生成方式、缓存关联的频道、缓存过期时间、获取数据方法执行前后的回调函数。
7.根据权利要求5所述的一种缓存依赖关系的管理系统,其特征在于,在所述更新模块Flush可以设置关联频道、执行缓存刷新的时机。
8.根据权利要求5所述的一种缓存依赖关系的管理系统,其特征在于,在所述依赖关系建立模块CoyeeCacheSupportAspect中,可以设置缓存存储位置、最小刷新频率、启用调试模式。
9.一种电子设备,其特征在于,包括至少一个处理器,以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至3中任一所述的一种缓存依赖关系的管理方法。
10.一种存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至3中任一所述的一种缓存依赖关系的管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211345098.5A CN115878666B (zh) | 2022-10-31 | 2022-10-31 | 一种缓存依赖关系的管理方法、系统、电子设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211345098.5A CN115878666B (zh) | 2022-10-31 | 2022-10-31 | 一种缓存依赖关系的管理方法、系统、电子设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115878666A true CN115878666A (zh) | 2023-03-31 |
CN115878666B CN115878666B (zh) | 2023-09-12 |
Family
ID=85759190
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211345098.5A Active CN115878666B (zh) | 2022-10-31 | 2022-10-31 | 一种缓存依赖关系的管理方法、系统、电子设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115878666B (zh) |
Citations (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110161290A1 (en) * | 2009-12-30 | 2011-06-30 | Sybase, Inc. | Data caching for mobile applications |
CN108628891A (zh) * | 2017-03-21 | 2018-10-09 | 北京京东尚科信息技术有限公司 | 实现数据缓存层的方法、装置、电子设备和可读存储介质 |
CN109766330A (zh) * | 2018-12-29 | 2019-05-17 | 北京三快在线科技有限公司 | 数据分片方法、装置、电子设备及存储介质 |
CN110187982A (zh) * | 2019-04-28 | 2019-08-30 | 厦门科灿信息技术有限公司 | 订阅消息的方法及终端设备 |
CN110989939A (zh) * | 2019-12-16 | 2020-04-10 | 中国银行股份有限公司 | 一种数据缓存处理方法、装置、设备及缓存组件 |
CN111163159A (zh) * | 2019-12-27 | 2020-05-15 | 中国平安人寿保险股份有限公司 | 消息订阅方法、装置、服务器及计算机可读存储介质 |
CN111666305A (zh) * | 2020-06-05 | 2020-09-15 | 福建天晴在线互动科技有限公司 | 一种实现redis缓存和数据库进行关联的方法及其系统 |
CN112019619A (zh) * | 2020-08-27 | 2020-12-01 | 中国平安财产保险股份有限公司 | 分布式缓存处理方法、装置、设备及存储介质 |
CN112052048A (zh) * | 2020-08-07 | 2020-12-08 | 深圳市欢太科技有限公司 | 数据加载方法及装置、设备、存储介质 |
CN112506961A (zh) * | 2020-12-28 | 2021-03-16 | 浪潮云信息技术股份公司 | 一种提高数据查询效率的方法 |
CN112559525A (zh) * | 2020-12-15 | 2021-03-26 | 中国工商银行股份有限公司 | 数据检查系统、方法、装置和服务器 |
CN112559070A (zh) * | 2020-12-09 | 2021-03-26 | 北京展心展力信息科技有限公司 | 应用程序启动时的初始化方法、装置、电子设备及介质 |
CN112699148A (zh) * | 2020-12-31 | 2021-04-23 | 北京三快在线科技有限公司 | 刷新缓存的方法、装置、设备及存储介质 |
CN113032393A (zh) * | 2021-01-26 | 2021-06-25 | 苏州帝博信息技术有限公司 | 一种绑定关联对象的方法和装置 |
CN113672248A (zh) * | 2020-05-14 | 2021-11-19 | 武汉斗鱼鱼乐网络科技有限公司 | 一种补丁获取方法、装置、服务端及存储介质 |
CN114416798A (zh) * | 2022-01-20 | 2022-04-29 | 上海金融期货信息技术有限公司 | 基于数据依赖关系和一致性保证的缓存管理方法及装置 |
CN114553960A (zh) * | 2022-04-22 | 2022-05-27 | 四川万网鑫成信息科技有限公司 | 一种数据缓存方法、装置、设备及存储介质 |
CN114840272A (zh) * | 2022-07-04 | 2022-08-02 | 好享家舒适智能家居股份有限公司 | 一种多数据源动态规划及监测系统、方法 |
-
2022
- 2022-10-31 CN CN202211345098.5A patent/CN115878666B/zh active Active
Patent Citations (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110161290A1 (en) * | 2009-12-30 | 2011-06-30 | Sybase, Inc. | Data caching for mobile applications |
CN108628891A (zh) * | 2017-03-21 | 2018-10-09 | 北京京东尚科信息技术有限公司 | 实现数据缓存层的方法、装置、电子设备和可读存储介质 |
CN109766330A (zh) * | 2018-12-29 | 2019-05-17 | 北京三快在线科技有限公司 | 数据分片方法、装置、电子设备及存储介质 |
CN110187982A (zh) * | 2019-04-28 | 2019-08-30 | 厦门科灿信息技术有限公司 | 订阅消息的方法及终端设备 |
CN110989939A (zh) * | 2019-12-16 | 2020-04-10 | 中国银行股份有限公司 | 一种数据缓存处理方法、装置、设备及缓存组件 |
CN111163159A (zh) * | 2019-12-27 | 2020-05-15 | 中国平安人寿保险股份有限公司 | 消息订阅方法、装置、服务器及计算机可读存储介质 |
CN113672248A (zh) * | 2020-05-14 | 2021-11-19 | 武汉斗鱼鱼乐网络科技有限公司 | 一种补丁获取方法、装置、服务端及存储介质 |
CN111666305A (zh) * | 2020-06-05 | 2020-09-15 | 福建天晴在线互动科技有限公司 | 一种实现redis缓存和数据库进行关联的方法及其系统 |
CN112052048A (zh) * | 2020-08-07 | 2020-12-08 | 深圳市欢太科技有限公司 | 数据加载方法及装置、设备、存储介质 |
CN112019619A (zh) * | 2020-08-27 | 2020-12-01 | 中国平安财产保险股份有限公司 | 分布式缓存处理方法、装置、设备及存储介质 |
CN112559070A (zh) * | 2020-12-09 | 2021-03-26 | 北京展心展力信息科技有限公司 | 应用程序启动时的初始化方法、装置、电子设备及介质 |
CN112559525A (zh) * | 2020-12-15 | 2021-03-26 | 中国工商银行股份有限公司 | 数据检查系统、方法、装置和服务器 |
CN112506961A (zh) * | 2020-12-28 | 2021-03-16 | 浪潮云信息技术股份公司 | 一种提高数据查询效率的方法 |
CN112699148A (zh) * | 2020-12-31 | 2021-04-23 | 北京三快在线科技有限公司 | 刷新缓存的方法、装置、设备及存储介质 |
CN113032393A (zh) * | 2021-01-26 | 2021-06-25 | 苏州帝博信息技术有限公司 | 一种绑定关联对象的方法和装置 |
CN114416798A (zh) * | 2022-01-20 | 2022-04-29 | 上海金融期货信息技术有限公司 | 基于数据依赖关系和一致性保证的缓存管理方法及装置 |
CN114553960A (zh) * | 2022-04-22 | 2022-05-27 | 四川万网鑫成信息科技有限公司 | 一种数据缓存方法、装置、设备及存储介质 |
CN114840272A (zh) * | 2022-07-04 | 2022-08-02 | 好享家舒适智能家居股份有限公司 | 一种多数据源动态规划及监测系统、方法 |
Non-Patent Citations (1)
Title |
---|
蔡津秡: "AOP对象缓存在Web服务中的应用", 《电信快报》, pages 11 - 14 * |
Also Published As
Publication number | Publication date |
---|---|
CN115878666B (zh) | 2023-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9547685B2 (en) | Halloween protection in a multi-version database system | |
CN107247808B (zh) | 一种分布式NewSQL数据库系统及图片数据查询方法 | |
US9672017B2 (en) | Object storage and synchronization hooks for occasionally-connected devices | |
US7698253B2 (en) | Method and system for reducing host variable impact on access path selection | |
US8280907B2 (en) | System and method for managing access to data in a database | |
US7130838B2 (en) | Query optimization via a partitioned environment | |
EP2797014B1 (en) | Database update execution according to power management schemes | |
CN101840352A (zh) | 一种数据库连接池的监控方法及装置 | |
CN111259004B (zh) | 一种存储引擎中数据索引的方法以及相关装置 | |
US6829616B2 (en) | Method, system, and program for implementing a database trigger | |
CN106874343B (zh) | 一种时序数据库的数据删除方法及系统 | |
US6223176B1 (en) | Method and computer program product for implementing highly concurrent record insertion in an ordinal number dependent database | |
CN115878666A (zh) | 一种缓存依赖关系的管理方法、系统、电子设备及介质 | |
JP2001282599A (ja) | データ管理方法および装置並びにデータ管理プログラムを格納した記録媒体 | |
US20230205759A1 (en) | Managing a transaction isolation | |
CN111966717B (zh) | 一种降低数据库崩溃概率的数据访问方法及系统 | |
CN114153378A (zh) | 一种数据库内存管理系统及方法 | |
CN107656868B (zh) | 一种利用线程私有数据获取线程名字的调试方法及系统 | |
CN110019113B (zh) | 一种数据库的业务处理方法及数据库服务器 | |
CN111930642A (zh) | 缓存管理方法、电子设备以及缓存管理装置 | |
US11829354B2 (en) | Managing a read statement of a transaction | |
CN118069648A (zh) | 执行计划的处理方法、装置、设备和介质 | |
CN117370475A (zh) | 一种基于机器人数据的存储方法 | |
CN116303242A (zh) | 一种嵌入式轻量级数据库系统 | |
CN116383177A (zh) | 一种数据的版本变化记录方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |