CN115080625B - 基于Spring Cache缓存框架的缓存方法、装置、设备及存储介质 - Google Patents
基于Spring Cache缓存框架的缓存方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115080625B CN115080625B CN202210858204.3A CN202210858204A CN115080625B CN 115080625 B CN115080625 B CN 115080625B CN 202210858204 A CN202210858204 A CN 202210858204A CN 115080625 B CN115080625 B CN 115080625B
- Authority
- CN
- China
- Prior art keywords
- cache
- response data
- data
- medium
- module
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据缓存技术领域,公开了一种基于Spring Cache缓存框架的缓存方法、装置、设备及存储介质,其方法是在根据访问请求确定待反馈的响应数据后,先判断在缓存介质中是否已缓存有所述响应数据,若否则将所述响应数据写入所述缓存介质中,并根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化所述响应数据的、与历史读取次数正相关的且与历史写入次数负相关的缓存剩余时长,而若是则直接刷新所述响应数据的缓存剩余时长,如此可在高峰并发的访问情况下,提升热点数据的访问响应速度,降低数据库所承受的访问响应压力,进而可有效提升数据访问性能,便于实际应用和推广。
Description
技术领域
本发明属于数据缓存技术领域,具体地涉及一种基于Spring Cache缓存框架的缓存方法、装置、设备及存储介质。
背景技术
Spring Cache缓存框架是由spring 3.1版本(Spring开源框架是自2003年兴起的一种轻量级Java开发框架,由Rod Johnson在其著作《Expert One-On-One J2EEDevelopment and Design》中阐述的部分理念和原型衍生而来)发布出来的,它用于对使用缓存进行封装和抽象,并通过在方法上使用annotation注解就能拿到缓存结果,进而可解决业务代码与缓存代码的耦合度问题,即在不侵入业务代码的基础上让现有代码即刻支持缓存,它可让开发人员无感知的使用缓存。
虽然Spring Cache缓存框架整合了诸如ehcache、jcache、caffeine以及redis等多种缓存框架,并基于注解使得应用起来相当方便,但是由于它既不支持缓存过期时间的设置,也不支持在缓存即将失效前重置缓存过期时间的操作,更不支持热点数据分析,因此易导致热点数据(即在一定时间内被多次访问的数据)在缓存过期删除后又需要从数据库中重新获取并进行缓存,不但影响了热点数据的访问响应速度,还给数据库带来了巨大的访问响应压力,特别是在高峰并发的访问情况下,这一问题更为严重。
发明内容
为了解决现有Spring Cache缓存框架在高峰并发的访问情况下会限制热点数据响应速度以及给数据库带来巨大响应压力的问题,本发明目的在于提供一种基于SpringCache缓存框架的缓存方法、装置、计算机设备及计算机可读存储介质,可在高峰并发的访问情况下,提升热点数据的访问响应速度,降低数据库所承受的访问响应压力,进而可有效提升数据访问性能,便于实际应用和推广。
第一方面,本发明提供了一种基于Spring Cache缓存框架的缓存方法,包括:
在接收到访问请求后,根据所述访问请求确定待反馈的响应数据;
判断在缓存介质中是否已缓存有所述响应数据;
若判定在所述缓存介质中未缓存有所述响应数据,则从数据库中获取所述响应数据并进行反馈,同时将所述响应数据写入所述缓存介质中,并根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化所述响应数据的缓存剩余时长,其中,所述缓存剩余时长与所述响应数据在所述缓存介质上的历史读取次数正相关且与所述响应数据在所述缓存介质上的历史写入次数负相关;
若判定在所述缓存介质中已缓存有所述响应数据,则从所述缓存介质中读取所述响应数据并进行反馈, 同时根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中刷新所述响应数据的缓存剩余时长;
在所述缓存剩余时长为零时,通过所述缓存管理器将所述响应数据从所述缓存介质中删除。
基于上述发明内容,提供了一种在数据缓存过程中支持缓存过期时间设置及更新的新缓存方案,即在根据访问请求确定待反馈的响应数据后,先判断在缓存介质中是否已缓存有所述响应数据,若否则将所述响应数据写入所述缓存介质中,并根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化所述响应数据的、与历史读取次数正相关的且与历史写入次数负相关的缓存剩余时长,而若是则直接刷新所述响应数据的缓存剩余时长,如此可在高峰并发的访问情况下,提升热点数据的访问响应速度,降低数据库所承受的访问响应压力,进而可有效提升数据访问性能,便于实际应用和推广。此外,还可以沿用Spring Cache注解的使用便捷特性,扩展缓存管理和分析功能,以及使业务与缓存解耦,极大地提升开发效率和系统性能,给企业带来更多的收益和更好的口碑。
在一个可能的设计中,判断在缓存介质中是否已缓存有所述响应数据,包括:
将所述响应数据的所属应用名和所属模块名组合成一个检索关键词;
根据所述检索关键词,在缓存介质中进行数据检索;
若检索到有与所述检索关键词对应的数据,则判定在所述缓存介质中已缓存有所述响应数据,否则判定在所述缓存介质中未缓存有所述响应数据。
在一个可能的设计中,在将所述响应数据写入所述缓存介质中之后,所述方法还包括:
将所述响应数据的所属应用名和所属模块名组合成一个缓存名称;
在所述缓存介质中将所述响应数据命名为所述缓存名称。
在一个可能的设计中,根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化/刷新所述响应数据的缓存剩余时长,包括:
在一个可能的设计中,根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化/刷新所述响应数据的缓存剩余时长,包括:
式中,表示所述响应数据在所述缓存介质上的历史读取次数,表示所述响应数据在所述缓存介质上的历史写入次数,表示预设的相关系数,表示不大于的正整数,表示与所述响应数据属于同一应用/模块的其它数据的总数目,表示在与所述响应数据属于同一应用/模块的个其它数据中第个其它数据与所述响应数据的相关性,表示所述第个其它数据在所述缓存介质上的历史读取次数,表示所述第个其它数据在所述缓存介质上的历史写入次数;
针对与所述响应数据属于同一应用/模块的各个其它数据,若发现对应数据也缓存在所述缓存介质中,则先更新计算得到对应数据的缓存读取占比,然后根据计算结果在Spring Cache缓存框架的缓存管理器中刷新对应数据的缓存剩余时长。
在一个可能的设计中,在Spring Cache缓存框架的缓存管理器中刷新所述响应数据的缓存剩余时长,包括:
判断在从所述缓存介质中读取所述响应数据时所述响应数据的当前缓存剩余时长是否小于预设的时长阈值;
若是,则在Spring Cache缓存框架的缓存管理器中重置所述响应数据的缓存剩余时长,否则不刷新所述缓存剩余时长。
在一个可能的设计中,所述缓存介质采用基于远程字典服务Redis的分布式缓存系统,其中,所述分布式缓存系统包含有多个缓存节点,以便支持Redis多数据源配置以及通过硬编码方式来指定Redis数据源。
在一个可能的设计中,在所述分布式缓存系统中,通过Redis的消息发布/订阅机制使Spring Cache缓存框架的多个缓存管理器保持一致的数据缓存动作,其中,所述多个缓存管理器与所述多个缓存节点一一对应,所述数据缓存动作包括有数据写入动作、缓存剩余时长初始化/刷新动作和数据删除动作。
第二方面,本发明提供了一种基于Spring Cache缓存框架的缓存装置,包括有响应数据确定模块、数据缓存判断模块、时长初始化模块、时长刷新模块和数据删除模块;
所述响应数据确定模块,用于在接收到访问请求后,根据所述访问请求确定待反馈的响应数据;
所述数据缓存判断模块,通信连接所述响应数据确定模块,用于判断在缓存介质中是否已缓存有所述响应数据;
所述时长初始化模块,通信连接所述数据缓存判断模块,用于当判定在所述缓存介质中未缓存有所述响应数据时,从数据库中获取所述响应数据并进行反馈,同时将所述响应数据写入所述缓存介质中,并根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化所述响应数据的缓存剩余时长,其中,所述缓存剩余时长与所述响应数据在所述缓存介质上的历史读取次数正相关且与所述响应数据在所述缓存介质上的历史写入次数负相关;
所述时长刷新模块,通信连接所述数据缓存判断模块,用于当判定在所述缓存介质中已缓存有所述响应数据时,从所述缓存介质中读取所述响应数据并进行反馈, 同时根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中刷新所述响应数据的缓存剩余时长;
所述数据删除模块,分别通信连接所述时长初始化模块和所述时长刷新模块,用于在所述缓存剩余时长为零时,通过所述缓存管理器将所述响应数据从所述缓存介质中删除。
在一个可能的设计中,所述时长初始化模块/所述时长刷新模块包括有通信相连的计算子模块和时长设置子模块;
在一个可能的设计中,所述时长初始化模块/所述时长刷新模块包括有通信相连的计算子模块和时长设置子模块;
式中,表示所述响应数据在所述缓存介质上的历史读取次数,表示所述响应数据在所述缓存介质上的历史写入次数,表示预设的相关系数,表示不大于的正整数,表示与所述响应数据属于同一应用/模块的其它数据的总数目,表示在与所述响应数据属于同一应用/模块的个其它数据中第个其它数据与所述响应数据的相关性,表示所述第个其它数据在所述缓存介质上的历史读取次数,表示所述第个其它数据在所述缓存介质上的历史写入次数;
第三方面,本发明提供了一种计算机设备,包括有依次通信连接的存储单元、处理单元和收发单元,其中,所述存储单元用于存储计算机程序,所述收发单元用于收发消息,所述处理单元用于读取所述计算机程序,执行如第一方面或第一方面中任意可能设计所述的缓存方法。
第四方面,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,执行如第一方面或第一方面中任意可能设计所述的缓存方法。
第五方面,本发明提供了一种包含指令的计算机程序产品,当所述指令在计算机上运行时,使所述计算机执行如第一方面或第一方面中任意可能设计所述的缓存方法。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的基于Spring Cache缓存框架的缓存方法流程示意图。
图2是本发明提供的在缓存方法中对缓存剩余时长进行初始化及刷新的示例图。
图3是本发明提供的在缓存方法中对缓存剩余时长进行重置刷新的示例图。
图4是本发明提供的基于Spring Cache缓存框架的缓存装置结构示意图。
图5是本发明提供的计算机设备的结构示意图。
具体实施方式
下面结合附图及具体实施例来对本发明作进一步阐述。在此需要说明的是,对于这些实施例方式的说明虽然是用于帮助理解本发明,但并不构成对本发明的限定。本文公开的特定结构和功能细节仅用于描述本发明示例的实施例。然而,可用很多备选的形式来体现本发明,并且不应当理解为本发明限制在本文阐述的实施例中。
应当理解,尽管本文可能使用术语第一和第二等等来描述各种对象,但是这些对象不应当受到这些术语的限制。这些术语仅用于区分一个对象和另一个对象。例如可以将第一对象称作第二对象,并且类似地可以将第二对象称作第一对象,同时不脱离本发明的示例实施例的范围。
应当理解,对于本文中可能出现的术语“和/或”,其仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A、单独存在B或者同时存在A和B等三种情况;对于本文中可能出现的术语“/和”,其是描述另一种关联对象关系,表示可以存在两种关系,例如,A/和B,可以表示:单独存在A或者同时存在A和B等两种情况;另外,对于本文中可能出现的字符“/”,一般表示前后关联对象是一种“或”关系。
如图1所示,本实施例第一方面提供的且基于Spring Cache缓存框架的缓存方法,可以但不限于由具有一定计算资源的且通信连接有访问请求发起终端的计算机设备执行,例如由平台服务器、个人计算机(Personal Computer,PC,指一种大小、价格和性能适用于个人使用的多用途计算机;台式机、笔记本电脑到小型笔记本电脑和平板电脑以及超级本等都属于个人计算机)、智能手机、个人数字助理(Personal digital assistant,PDA)或可穿戴设备等电子设备执行,以便在高峰并发的访问情况下,提升热点数据的访问响应速度,降低数据库所承受的访问响应压力,进而可有效提升数据访问性能,便于实际应用和推广。如图1所示,所述基于Spring Cache缓存框架的缓存方法,可以但不限于包括有如下步骤S1~S5。
S1.在接收到访问请求后,根据所述访问请求确定待反馈的响应数据。
在所述步骤S1中,所述访问请求来自于所述访问请求发起终端,其可以但不限于携带有应用名(即终端APP应用程序或微信小程序等应用的名称)和模块名(即终端APP应用程序或微信小程序等应用中功能模块的名称)等信息,以便根据所述应用名及所述模块名,将某个应用(其与所述应用名对应)下的某个模块(其与所述模块名对应)的一组存储数据(其存储在数据库中/和缓存在缓存介质中)作为待反馈的响应数据。
S2.判断在缓存介质中是否已缓存有所述响应数据。
在所述步骤S2中,所述缓存介质用于临时缓存来自数据库的数据,以便快速响应访问请求并进行反馈(即可直接读取缓存数据并进行反馈,无需从数据库中获取,如此可缩短数据读取路径,提升访问响应速度);优选的,为了实现分布式缓存数据源动态切换的目的,所述缓存介质采用基于远程字典服务Redis(Remote Dictionary Server,即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型Key-Value数据库,并提供多种语言的API)的分布式缓存系统,其中,所述分布式缓存系统包含有多个缓存节点,以便支持Redis多数据源配置以及通过硬编码方式来指定Redis数据源。此外,考虑在前述分布式缓存系统中存在有多个缓存节点,为了确保多缓存节点针对同一数据的缓存一致性,进一步优选的,在所述分布式缓存系统中,通过Redis的消息发布/订阅机制使Spring Cache缓存框架的多个缓存管理器保持一致的数据缓存动作,其中,所述多个缓存管理器与所述多个缓存节点一一对应,所述数据缓存动作包括但不限于有数据写入动作、缓存剩余时长初始化/刷新动作和数据删除动作等。
在所述步骤S2中,若出于对缓存数据进行细粒度控制目的,已按照应用名和模块名对缓存数据进行分组(即将某应用下的某模块的数据分为一组,以此作为缓存管理的最小粒度),并使每个分组拥有各自的个性化配置,如缓存过期时间和失效重置时间等(它们可在统一配置中心通过修改个性化缓存管理器进行配置,并在访问缓存数据时通过拉取远端配置实时生效),则判断在缓存介质中是否已缓存有所述响应数据,包括但不限于有如下步骤S21~S23:S21.将所述响应数据的所属应用名和所属模块名组合成一个检索关键词;S22.根据所述检索关键词,在缓存介质中进行数据检索;S23.若检索到有与所述检索关键词对应的数据,则判定在所述缓存介质中已缓存有所述响应数据,否则判定在所述缓存介质中未缓存有所述响应数据。
S3.若判定在所述缓存介质中未缓存有所述响应数据,则从数据库中获取所述响应数据并进行反馈,同时将所述响应数据写入所述缓存介质中,并根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化所述响应数据的缓存剩余时长,其中,所述缓存剩余时长与所述响应数据在所述缓存介质上的历史读取次数正相关且与所述响应数据在所述缓存介质上的历史写入次数负相关。
在所述步骤S3中,从数据库中获取所述响应数据并进行反馈以及将所述响应数据写入所述缓存介质中为现有常规的访问响应手段以及数据缓存手段。此外,为了便于基于应用名和模块名进行数据检索,优选的,在将所述响应数据写入所述缓存介质中之后,所述方法还包括但不限于有:先将所述响应数据的所属应用名和所属模块名组合成一个缓存名称;然后在所述缓存介质中将所述响应数据命名为所述缓存名称。
在所述步骤S3中,所述缓存剩余时长即反映数据的缓存过期时间(即从当前时刻至缓存数据的过期时刻的时间),由于其与所述响应数据在所述缓存介质上的历史读取次数正相关且与所述响应数据在所述缓存介质上的历史写入次数负相关,即可在所述响应数据热度(读取次数越多,数据访问越频繁,热度越高;写入次数越多,数据访问越稀疏,热度越低)越高时,配置一个越长的缓存过期时间,确保在被访问时可更多地是直接从所述缓存介质中读取并进行反馈。具体的,根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化所述响应数据的缓存剩余时长,包括但不限于有如下步骤:先根据所述响应数据在所述缓存介质上的历史读写记录,按照如下公式计算得到所述响应数据的缓存读取占比:
式中,表示所述响应数据在所述缓存介质上的历史读取次数,表示所述响应数据在所述缓存介质上的历史写入次数;根据所述缓存读取占比,在Spring Cache缓存框架的缓存管理器中将所述响应数据的缓存剩余时长初始化/刷新为一个与所述缓存读取占比正相关的数值。通过前述计算公式,即可实现使所述缓存剩余时长与所述历史读取次数正相关且与所述历史写入次数负相关的目的。此外,所述历史读取次数和所述历史写入次数可优选为最近一段时间内的读写次数,例如最近一周的历史读取次数和历史写入次数。
S4.若判定在所述缓存介质中已缓存有所述响应数据,则从所述缓存介质中读取所述响应数据并进行反馈, 同时根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中刷新所述响应数据的缓存剩余时长。
在所述步骤S4中,由于针对所述响应数据进行了一次新的读取操作,表明其实时热度有所提升,因此有必要刷新对应的缓存剩余时长。同样具体的,根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中刷新所述响应数据的缓存剩余时长,包括但不限于有如下步骤:先根据所述响应数据在所述缓存介质上的历史读写记录,按照如下公式计算得到所述响应数据的缓存读取占比:
式中,表示所述响应数据在所述缓存介质上的历史读取次数,表示所述响应数据在所述缓存介质上的历史写入次数;根据所述缓存读取占比,在Spring Cache缓存框架的缓存管理器中将所述响应数据的缓存剩余时长初始化/刷新为一个与所述缓存读取占比正相关的数值。
如图2所示,在第一次收到针对某个数据的访问请求时,会通过首次数据写入操作(W1)将所述某个数据缓存在所述缓存介质中,此时缓存读取占比为0%,缓存剩余时长可初始化为一个默认值;在W1操作后且未过期前再次收到针对所述某个数据的访问请求时,会通过首次数据读取操作(R1)进行响应,此时缓存读取占比为1/(1+1)*100%=50%,缓存剩余时长会刷新为一个大于所述默认值的第一数值;在R1操作后且未过期前再次收到针对所述某个数据的访问请求时,会通过第二次数据读取操作(R2)进行响应,此时缓存读取占比为2/(2+1)*100%≈66.7%,缓存剩余时长会刷新为一个大于所述第一数值的第二数值;在R2操作后且未过期前再次收到针对所述某个数据的访问请求时,会通过第三次数据读取操作(R3)进行响应,此时缓存读取占比为3/(3+1)*100%=75%,缓存剩余时长会刷新为一个大于所述第二数值的第三数值;在R3操作后且过期后再次收到针对所述某个数据的访问请求时,会通过第二次数据写入操作(W2)将所述某个数据再次缓存在所述缓存介质中,此时缓存读取占比为3/(3+2)*100%=60%,缓存剩余时长会刷新为一个大于所述第一数值且小于所述第二数值的第四数值;在W2操作后且过期后再次收到针对所述某个数据的访问请求时,会通过第三次数据写入操作(W3)将所述某个数据再次缓存在所述缓存介质中,此时缓存读取占比为3/(3+3)*100%=50%,缓存剩余时长会刷新为所述第一数值;以此类推。
在所述步骤S4中,为了能够实现在缓存即将失效前才重置缓存过期时间的目的,优选的,在Spring Cache缓存框架的缓存管理器中刷新所述响应数据的缓存剩余时长,包括但不限于有:先判断在从所述缓存介质中读取所述响应数据时所述响应数据的当前缓存剩余时长是否小于预设的时长阈值;若是,则在Spring Cache缓存框架的缓存管理器中重置所述响应数据的缓存剩余时长,否则不刷新所述缓存剩余时长。如图3所示,例如在所述时长阈值为5秒的情况下,若在缓存即将失效前5秒内针对所述响应数据发生了一次数据读取操作(即如图3所示的R1操作和R2操作),则根据所述响应数据的当前缓存读取占比重置所述响应数据的缓存剩余时长(例如针对R1操作重置为12秒,针对R2操作重置为13秒),反之则不触发缓存过期时间重置/刷新操作(例如针对R3操作不重置)。
S5.在所述缓存剩余时长为零时,通过所述缓存管理器将所述响应数据从所述缓存介质中删除。
在所述步骤S5中,通过所述缓存管理器将所述响应数据从所述缓存介质中删除的具体手段为现有Spring Cache缓存框架下的常规手段,如此可以在数据热度降低时,自动清除缓存,以便及时释放缓存空间。由于所述缓存介质已不再缓存有所述响应数据,因此若再次收到针对所述某个数据的访问请求,则需要从所述数据库中获取所述响应数据并进行反馈,同时将所述响应数据再次写入所述缓存介质中。
由此基于前述步骤S1~S5所描述的且基于Spring Cache缓存框架的缓存方法,提供了一种在数据缓存过程中支持缓存过期时间设置及更新的新缓存方案,即在根据访问请求确定待反馈的响应数据后,先判断在缓存介质中是否已缓存有所述响应数据,若否则将所述响应数据写入所述缓存介质中,并根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化所述响应数据的、与历史读取次数正相关的且与历史写入次数负相关的缓存剩余时长,而若是则直接刷新所述响应数据的缓存剩余时长,如此可在高峰并发的访问情况下,提升热点数据的访问响应速度,降低数据库所承受的访问响应压力,进而可有效提升数据访问性能,便于实际应用和推广。此外,还可以沿用Spring Cache注解的使用便捷特性,扩展缓存管理和分析功能,以及使业务与缓存解耦,极大地提升开发效率和系统性能,给企业带来更多的收益和更好的口碑。
本实施例在前述第一方面的技术方案基础上,还提供了一种如何更准确地初始化/刷新缓存剩余时长的可能设计一,即根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化/刷新所述响应数据的缓存剩余时长,包括但不限于有如下步骤S341~S342。
式中,表示所述响应数据在所述缓存介质上的历史读取次数,表示所述响应数据在所述缓存介质上的历史写入次数,表示预设的相关系数,表示不大于的正整数,表示与所述响应数据属于同一应用/模块的其它数据的总数目,表示在与所述响应数据属于同一应用/模块的个其它数据中第个其它数据与所述响应数据的相关性,表示所述第个其它数据在所述缓存介质上的历史读取次数,表示所述第个其它数据在所述缓存介质上的历史写入次数。
在所述步骤S341中,考虑所述个其它数据的热度变化也会因数据相关性而影响到所述响应数据的热度,因此通过前述计算公式,可以更加准确地利用所述缓存读取占比来反映所述响应数据的当前热度,以便后续准确地初始化/刷新所述响应数据的缓存剩余时长。同样的,考虑所述响应数据的热度变化也会影响到各个其它数据的热度,为了及时地刷新所述各个其它数据的缓存剩余时长,优选的,在计算得到所述响应数据的缓存读取占比之后,所述方法还包括但不限于有:针对与所述响应数据属于同一应用/模块的各个其它数据,若发现对应数据也缓存在所述缓存介质中,则先更新计算得到对应数据的缓存读取占比(具体计算公式参照前述步骤S341),然后根据计算结果在Spring Cache缓存框架的缓存管理器中刷新对应数据的缓存剩余时长(具体刷新方式参照后续步骤S342)。此外,所述相关系数可根据所述个其它数据与所述响应数据的不同所属类别情况而进行差异化设置,例如当所述个其它数据与所述响应数据属于同一应用时,所述相关系数取介于0.01~0.05之间的第一系数值,而当所述个其它数据与所述响应数据属于同一模块时,所述相关系数取介于0.03~0.10之间的第二系数值,且有所述第二系数值大于所述第一系数值。
在所述步骤S341之前,为了准确地量化所述各个其它数据与所述响应数据的相关性,优选的,在计算得到所述响应数据的缓存读取占比之前,所述方法还包括但不限于有如下步骤:先针对与所述响应数据属于同一应用/模块的各个其它数据,根据对应数据的历史缓存时期以及所述响应数据的历史缓存时期,统计得到对应数据与所述响应数据的历史缓存同期时长;然后针对所述各个其它数据,按照如下公式计算得到对应数据与所述响应数据的相关性:
由此基于上述步骤S341~S342所描述的可能设计一,可通过考虑其它数据的热度变化也会因数据相关性而影响到响应数据的热度这一实际情况,利用计算所得的缓存读取占比来更加准确地反映所述响应数据的当前热度,进而可更准确地初始化/刷新所述响应数据的缓存剩余时长,进一步有效提升数据访问性能。
如图4所示,本实施例第二方面提供了一种实现第一方面或第一方面中任意可能设计所述的缓存方法的虚拟装置,包括有响应数据确定模块、数据缓存判断模块、时长初始化模块、时长刷新模块和数据删除模块;
所述响应数据确定模块,用于在接收到访问请求后,根据所述访问请求确定待反馈的响应数据;
所述数据缓存判断模块,通信连接所述响应数据确定模块,用于判断在缓存介质中是否已缓存有所述响应数据;
所述时长初始化模块,通信连接所述数据缓存判断模块,用于当判定在所述缓存介质中未缓存有所述响应数据时,从数据库中获取所述响应数据并进行反馈,同时将所述响应数据写入所述缓存介质中,并根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化所述响应数据的缓存剩余时长,其中,所述缓存剩余时长与所述响应数据在所述缓存介质上的历史读取次数正相关且与所述响应数据在所述缓存介质上的历史写入次数负相关;
所述时长刷新模块,通信连接所述数据缓存判断模块,用于当判定在所述缓存介质中已缓存有所述响应数据时,从所述缓存介质中读取所述响应数据并进行反馈, 同时根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中刷新所述响应数据的缓存剩余时长;
所述数据删除模块,分别通信连接所述时长初始化模块和所述时长刷新模块,用于在所述缓存剩余时长为零时,通过所述缓存管理器将所述响应数据从所述缓存介质中删除。
在一个可能的设计中,所述时长初始化模块/所述时长刷新模块包括有通信相连的计算子模块和时长设置子模块;
在一个可能的设计中,所述时长初始化模块/所述时长刷新模块包括有通信相连的计算子模块和时长设置子模块;
式中,表示所述响应数据在所述缓存介质上的历史读取次数,表示所述响应数据在所述缓存介质上的历史写入次数,表示预设的相关系数,表示不大于的正整数,表示与所述响应数据属于同一应用/模块的其它数据的总数目,表示在与所述响应数据属于同一应用/模块的个其它数据中第个其它数据与所述响应数据的相关性,表示所述第个其它数据在所述缓存介质上的历史读取次数,表示所述第个其它数据在所述缓存介质上的历史写入次数;
本实施例第二方面提供的前述装置的工作过程、工作细节和技术效果,可以参见第一方面或第一方面中任意可能设计所述的缓存方法,于此不再赘述。
如图5所示,本实施例第三方面提供了一种执行如第一方面或第一方面中任意可能设计所述的缓存方法的计算机设备,包括有依次通信连接的存储单元、处理单元和收发单元,其中,所述存储单元用于存储计算机程序,所述收发单元用于收发消息,所述处理单元用于读取所述计算机程序,执行如第一方面或第一方面中任意可能设计所述的缓存方法。具体举例的,所述存储单元可以但不限于包括随机存取存储器(Random-AccessMemory,RAM)、只读存储器(Read-Only Memory,ROM)、闪存(Flash Memory)、先进先出存储器(First Input First Output,FIFO)和/或先进后出存储器(First Input Last Output,FILO)等等;所述处理单元可以但不限于采用型号为STM32F105系列的微处理器。此外,所述计算机设备还可以但不限于包括有电源单元、显示单元和其它必要的部件。
本实施例第三方面提供的前述计算机设备的工作过程、工作细节和技术效果,可以参见第一方面或第一方面中任意可能设计所述的缓存方法,于此不再赘述。
本实施例第四方面提供了一种存储包含如第一方面或第一方面中任意可能设计所述的缓存方法的指令的计算机可读存储介质,即所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,执行如第一方面或第一方面中任意可能设计所述的缓存方法。其中,所述计算机可读存储介质是指存储数据的载体,可以但不限于包括软盘、光盘、硬盘、闪存、优盘和/或记忆棒(Memory Stick)等计算机可读存储介质,所述计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。
本实施例第四方面提供的前述计算机可读存储介质的工作过程、工作细节和技术效果,可以参见如第一方面或第一方面中任意可能设计所述的缓存方法,于此不再赘述。
本实施例第五方面提供了一种包含指令的计算机程序产品,当所述指令在计算机上运行时,使所述计算机执行如第一方面或第一方面中任意可能设计所述的缓存方法。其中,所述计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。
最后应说明的是,本发明不局限于上述可选的实施方式,任何人在本发明的启示下都可得出其他各种形式的产品。上述具体实施方式不应理解成对本发明的保护范围的限制,本发明的保护范围应当以权利要求书中界定的为准,并且说明书可以用于解释权利要求书。
Claims (10)
1.一种基于Spring Cache缓存框架的缓存方法,其特征在于,包括:
在接收到访问请求后,根据所述访问请求确定待反馈的响应数据;
判断在缓存介质中是否已缓存有所述响应数据;
若判定在所述缓存介质中未缓存有所述响应数据,则从数据库中获取所述响应数据并进行反馈,同时将所述响应数据写入所述缓存介质中,并根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化所述响应数据的缓存剩余时长,其中,所述缓存剩余时长与所述响应数据在所述缓存介质上的历史读取次数正相关且与所述响应数据在所述缓存介质上的历史写入次数负相关;
若判定在所述缓存介质中已缓存有所述响应数据,则从所述缓存介质中读取所述响应数据并进行反馈, 同时根据所述响应数据在所述缓存介质上的历史读写记录,在SpringCache缓存框架的缓存管理器中刷新所述响应数据的缓存剩余时长;
在所述缓存剩余时长为零时,通过所述缓存管理器将所述响应数据从所述缓存介质中删除。
2.如权利要求1所述的缓存方法,其特征在于,判断在缓存介质中是否已缓存有所述响应数据,包括:
将所述响应数据的所属应用名和所属模块名组合成一个检索关键词;
根据所述检索关键词,在缓存介质中进行数据检索;
若检索到有与所述检索关键词对应的数据,则判定在所述缓存介质中已缓存有所述响应数据,否则判定在所述缓存介质中未缓存有所述响应数据。
4.如权利要求1所述的缓存方法,其特征在于,根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化/刷新所述响应数据的缓存剩余时长,包括:
式中,表示所述响应数据在所述缓存介质上的历史读取次数,表示所述响应数据在所述缓存介质上的历史写入次数,表示预设的相关系数,表示不大于的正整数,表示与所述响应数据属于同一应用/模块的其它数据的总数目,表示在与所述响应数据属于同一应用/模块的个其它数据中第个其它数据与所述响应数据的相关性,表示所述第个其它数据在所述缓存介质上的历史读取次数,表示所述第个其它数据在所述缓存介质上的历史写入次数;
6.如权利要求1所述的缓存方法,其特征在于,在Spring Cache缓存框架的缓存管理器中刷新所述响应数据的缓存剩余时长,包括:
判断在从所述缓存介质中读取所述响应数据时所述响应数据的当前缓存剩余时长是否小于预设的时长阈值;
若是,则在Spring Cache缓存框架的缓存管理器中重置所述响应数据的缓存剩余时长,否则不刷新所述缓存剩余时长。
7.如权利要求1所述的缓存方法,其特征在于,所述缓存介质采用基于远程字典服务Redis的分布式缓存系统,其中,所述分布式缓存系统包含有多个缓存节点,以便支持Redis多数据源配置以及通过硬编码方式来指定Redis数据源。
8.一种基于Spring Cache缓存框架的缓存装置,其特征在于,包括有响应数据确定模块、数据缓存判断模块、时长初始化模块、时长刷新模块和数据删除模块;
所述响应数据确定模块,用于在接收到访问请求后,根据所述访问请求确定待反馈的响应数据;
所述数据缓存判断模块,通信连接所述响应数据确定模块,用于判断在缓存介质中是否已缓存有所述响应数据;
所述时长初始化模块,通信连接所述数据缓存判断模块,用于当判定在所述缓存介质中未缓存有所述响应数据时,从数据库中获取所述响应数据并进行反馈,同时将所述响应数据写入所述缓存介质中,并根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中初始化所述响应数据的缓存剩余时长,其中,所述缓存剩余时长与所述响应数据在所述缓存介质上的历史读取次数正相关且与所述响应数据在所述缓存介质上的历史写入次数负相关;
所述时长刷新模块,通信连接所述数据缓存判断模块,用于当判定在所述缓存介质中已缓存有所述响应数据时,从所述缓存介质中读取所述响应数据并进行反馈, 同时根据所述响应数据在所述缓存介质上的历史读写记录,在Spring Cache缓存框架的缓存管理器中刷新所述响应数据的缓存剩余时长;
所述数据删除模块,分别通信连接所述时长初始化模块和所述时长刷新模块,用于在所述缓存剩余时长为零时,通过所述缓存管理器将所述响应数据从所述缓存介质中删除。
9.一种计算机设备,其特征在于,包括有依次通信连接的存储单元、处理单元和收发单元,其中,所述存储单元用于存储计算机程序,所述收发单元用于收发消息,所述处理单元用于读取所述计算机程序,执行如权利要求1~7中任意一项所述的缓存方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,执行如权利要求1~7中任意一项所述的缓存方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210858204.3A CN115080625B (zh) | 2022-07-21 | 2022-07-21 | 基于Spring Cache缓存框架的缓存方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210858204.3A CN115080625B (zh) | 2022-07-21 | 2022-07-21 | 基于Spring Cache缓存框架的缓存方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115080625A CN115080625A (zh) | 2022-09-20 |
CN115080625B true CN115080625B (zh) | 2022-11-04 |
Family
ID=83241954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210858204.3A Active CN115080625B (zh) | 2022-07-21 | 2022-07-21 | 基于Spring Cache缓存框架的缓存方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115080625B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116301655B (zh) * | 2023-04-12 | 2023-11-07 | 深圳市英唐数码科技有限公司 | 一种历史笔记图片加载方法、系统和可读存储介质 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014225109A (ja) * | 2013-05-16 | 2014-12-04 | 株式会社 日立産業制御ソリューションズ | 負荷分散装置及びプログラム |
CN107451144B (zh) * | 2016-05-31 | 2019-12-31 | 北京京东尚科信息技术有限公司 | 缓存读取方法和装置 |
CN108153890A (zh) * | 2017-12-28 | 2018-06-12 | 泰康保险集团股份有限公司 | 缓存管理方法与装置 |
CN109857760A (zh) * | 2018-12-22 | 2019-06-07 | 中国平安人寿保险股份有限公司 | 快速响应检索方法及装置、计算机装置及存储介质 |
US10678697B1 (en) * | 2019-01-31 | 2020-06-09 | Salesforce.Com, Inc. | Asynchronous cache building and/or rebuilding |
CN110489063B (zh) * | 2019-08-27 | 2023-12-19 | 北京奇艺世纪科技有限公司 | 缓存过期时间的设置方法、装置、电子设备及存储介质 |
CN111611283A (zh) * | 2020-05-27 | 2020-09-01 | 贝壳技术有限公司 | 数据缓存方法、装置、计算机可读存储介质及电子设备 |
CN113810455A (zh) * | 2021-01-18 | 2021-12-17 | 北京京东拓先科技有限公司 | 一种后端数据访问系统、方法、装置及存储介质 |
CN113515530B (zh) * | 2021-03-30 | 2023-06-13 | 贵州白山云科技股份有限公司 | 一种缓存对象更新方法、装置、设备及存储介质 |
CN113688155A (zh) * | 2021-08-05 | 2021-11-23 | 浪潮云信息技术股份公司 | 一种预防缓存雪崩的系统 |
-
2022
- 2022-07-21 CN CN202210858204.3A patent/CN115080625B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN115080625A (zh) | 2022-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10599637B2 (en) | Granular buffering of metadata changes for journaling file systems | |
US20090254594A1 (en) | Techniques to enhance database performance | |
CN107016027A (zh) | 实现业务信息快速搜索的方法和装置 | |
US11947842B2 (en) | Method for writing data in append mode, device and storage medium | |
CN109710185A (zh) | 数据处理方法及装置 | |
CN115080625B (zh) | 基于Spring Cache缓存框架的缓存方法、装置、设备及存储介质 | |
CN104519103A (zh) | 网络数据的同步处理方法、服务器及相关系统 | |
CN115455058A (zh) | 缓存数据的处理方法、装置、计算机设备及存储介质 | |
CN112395437B (zh) | 一种3d模型的加载方法、装置、电子设备及存储介质 | |
US8533398B2 (en) | Combination based LRU caching | |
US7120776B2 (en) | Method and apparatus for efficient runtime memory access in a database | |
CN112379945B (zh) | 用于运行应用的方法、装置、设备以及存储介质 | |
CN114064725A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN113051244A (zh) | 数据访问方法和装置、数据获取方法和装置 | |
CN111061744A (zh) | 图数据的更新方法、装置、计算机设备及存储介质 | |
CN103049478A (zh) | 一种Web服务的双路缓存机制设计方法 | |
CN117312695A (zh) | 用户评论数据缓存优化方法、设备及计算机可读介质 | |
CN114257575B (zh) | 一种客户端数据的处理方法、装置、电子设备及存储介质 | |
US20230048813A1 (en) | Method of storing data and method of reading data | |
CN116306964A (zh) | 样本数据的生成方法和装置 | |
CN117271518A (zh) | 多事务事实表的生成方法、装置、设备及存储介质 | |
JP2021152968A (ja) | 検索システムを最適化する方法、装置、電子機器、記憶媒体及びプログラム | |
CN117632795A (zh) | 缓存数据访问频次的统计方法、系统、装置、设备及介质 | |
CN118312100A (zh) | 数据处理方法、装置、计算机设备、存储介质和程序产品 | |
CN115455052A (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 |