多入口数据缓存方法及存储介质与流程

文档序号:20599893发布日期:2020-05-01 21:32阅读:143来源:国知局
多入口数据缓存方法及存储介质与流程

本发明涉及数据存储领域,尤其涉及一种加快多平台互通的数据缓存方法。



背景技术:

缓存技术是加快数据读取的一种常用技术,常常被用于各种各样的软件系统中,其作用是帮助系统更快地运行。目前存在诸多缓存系统包括mencached、redis、ehcache等,对各种各样缓存系统的访问和使用需要根据不同的要求来实现,没有一个统一的方式,难以实现对缓存系统进行快捷访问和管理。

目前广泛运用的缓存处理方法包括直接调用各种各样缓存系统的sdk进行直接缓存操作,还有使用aop进行缓存处理的方法,其中基于aop缓存处理的方法能够减少代码的侵入,但是仍然无法解决各个缓存系统之间快速切换的问题。

现有技术中还存在一些缓存服务实现方法,该方法将缓存划分为私有缓存和公共缓存,并对缓存key设置一个前缀,同时,框架提供一套规范来管理缓存key,以防止缓存key发生冲突,该方法主要应用于解决公共缓存和私有缓存的权限访问问题,对于缓存系统的快速切换以及代码侵入性都未能够很好解决,其中原始数据直接存入缓存系统会有数据异常问题。



技术实现要素:

为此,需要提供一种能够兼容多平台入口并缓存实现方法,用以实现减小代码侵入及统一的缓存快速切换和管理中介;

为实现上述目的,发明人提供了一种多入口数据缓存方法,包括如下步骤,拦截原缓存调用请求,根据该缓存调用请求生成密钥key,

所述密钥key的生成规则为:入口平台代码+命名空间+类名+命名空间版本号+识别码;

使用上述密钥在缓存服务器中进行数据调用,若获取得到数据,则将数据返回,若未命中数据,则直接使用原缓存调用请求获取数据库中数据,并将该数据及对应的密钥key存储在缓存服务器中。

具体地,还包括步骤,将该数据及对应的密钥key进行序列化后存储在缓存服务器中。

具体地,还包括步骤,判断密钥key中的版本号是否存在于缓存服务器,当判定为不存在于缓存服务器中时,进行步骤,直接使用原缓存调用请求获取数据库中数据。

具体地,还包括步骤,拦截对数据库中数据的操作,将变动数据的在缓存服务器中对应的命名空间版本号更新。

一种多入口数据缓存存储介质,存储有计算机程序,所述计算机程序在被运行时执行包括如下步骤,拦截原缓存调用请求,根据该缓存调用请求生成密钥key,

所述密钥key的生成规则为:入口平台代码+命名空间+类名+命名空间版本号+识别码;

使用上述密钥在缓存服务器中进行数据调用,若获取的到数据,则将数据返回,若未命中数据,则直接使用原缓存调用请求获取数据库中数据,并将该数据及对应的密钥key存储在缓存服务器中。

具体地,所述计算机程序在被运行时还执行包括步骤,将该数据及对应的密钥key进行序列化后存储在缓存服务器中。

具体地,所述计算机程序在被运行时还执行包括步骤,判断密钥key中的版本号是否存在于缓存服务器,当判定为不存在于缓存服务器中时,进行步骤,直接使用原缓存调用请求获取数据库中数据。

具体地,所述计算机程序在被运行时还执行包括步骤,拦截对数据库中数据的操作,将变动数据的在缓存服务器中对应的命名空间版本号更新。

区别于现有技术,本发明通过对数据调用的请求进行拦截,然后在缓存服务器中创建识别key及对应数据的方式,使得多入口分次调用相同数据的请求不用再多次访问数据库,减少了数据库的访问压力,并进一步地提高了入口数据调用的效率,同时减少了对业务系统的代码侵入。

附图说明

图1为本发明一实施方式涉及的流程图;

具体实施方式

为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。

请参阅图1,为本发明方案的流程图,具体工作原理如下:

一种多入口数据缓存方法,包括如下步骤,拦截原缓存调用请求,根据该缓存调用请求生成密钥key,

所述密钥key的生成规则为:入口平台代码+命名空间+类名+命名空间版本号+识别码;

使用上述密钥在缓存服务器中进行数据调用,若获取得到数据,则将数据返回,若未命中数据,则直接使用原缓存调用请求获取数据库中数据,并将该数据及对应的密钥key存储在缓存服务器中。

还包括步骤,将该数据及对应的密钥key进行序列化后存储在缓存服务器中。

具体地,还包括步骤,判断密钥key中的版本号是否存在于缓存服务器,当判定为不存在于缓存服务器中时,进行步骤,直接使用原缓存调用请求获取数据库中数据。

具体地,请参见图1,s100用户发起请求到控制层、控制层接受请求并调用服务层进行处理,aop对服务层上的请求和或注解进行拦截,根据该请求和或注解生成(namespace命名空间)到缓存服务器获取版本号,获取到版本号后,系统判断版本号是否正确。

s102如果为正确版本号,即在缓存服务器中存放有相关的命名空间的版本号,则系统按预设规则生成密钥key,并使用上述密钥在缓存服务器中进行数据调用,判断缓存是否命中,即是否可以根据上述密钥在缓存服务器中读取相应数据。如果缓存命中,即根据上述密钥在缓存服务器中读取相应数据,则直接就从缓存服务器获取数据并返回给前端,如果未命中则为缓存穿透,即调用原被拦截的上层请求和或注解到数据库中获取数据,同时把该数据以及按上述请求、注解生成的key存入缓存中。

s104如果为非正常版本号,表明命名空间中没有数据即缓存被穿透,调用原被拦截的请求和或注解直接访问数据库,并直接从数据库中获取数据,并按既定的规则将请求对应的key一并存入缓存服务器中。

s106对存入缓存数据库中的数据进行序列化,对于直接从缓存系统中获取到的数据,同样进行反序列化。这里的序列化和反序列化,即通用字符与编程语言对向之间的转换。在某些实施例中,我们可以使用fastjosn对java对象进行转换,序列化为把java对象转换为文本类型的json串的变化,反序列化为把文本类型的json串重新恢复为java对象的变化。在实际应用中,用户可能通过多种平台入口调用数据,缓存服务器的数据存储方式也各不相同,造成直接使用编程语言如java对象存入缓存服务器的数据在切换缓存服务器的时候会出现数据异常,即无法在多个缓存服务器中均被识别。这一实施例中,则通过序列化与反序列化能够提高本发明方法的普适性,解决多缓存服务器的兼容问题。

在具体的实施例中,还进行步骤,缓存删除:对于后台有变动的操作,包括调用外部接口或直接从数据库获取数据的操作,如果操作该方法被aop拦截,则按照平台、命名空间对计数器进行增加,其中计数器增加变相的就是对存储在缓存中的key的命名空间值进行变更操作,使得在按照原来的key获取命名空间中数据缓存的key的集合失活,从而造成按命名生成的key无法从缓存系统中获取到数据形成缓存穿透,原来的缓存按照时间或lru(缓存系统内部自带的缓存淘汰算法,主要依据,最久未被使用的进行淘汰缓存)被清除,最终达到删除缓存中失活的数据的目的。

在进一步的实施例中,我们可以以spring语言为例,如何应用上述方案达成相应的效果,首先配置springaop对需要缓存的方法进行拦截。对服务层和readthroughcache(添加读取缓存:@readthroughcache注解,)、clearcachethroughnspace(通过命名空间清除缓存:@clearcachethroughnspace注解)两个注解(annotation)进行拦截。

还进行步骤,根据springaop的特性,在需要使用缓存的方法上添加readthroughcache注解,在这一注解中,我们可以按上述key的生成规则设置平台入口名,命名空间,(不设置时,系统给统一的默认平台和命名空间)、以及缓存过期时间等,这样在调用数据库中的数据时,达到第一次缓存被穿透,第二次直接从缓存系统获取数据的目的。

还进行步骤,根据springaop的特性,在对数据有变化操作的方法上添加clearcachethroughnspace注解,并按上述key的生成规则设置平台入口名、命名空间(不设置时,系统给统一的默认的平台和命名空间)其中未设置命名空间时系统给予统一的命名空间,当后端接口或数据库发送变化且被aop所拦截,系统即根据统一的名命名空间对计数器进行曾加,由于计数器增加,用户请求系统后,无法获取命名空间中key的集合,造成所有使用该命名空间生成的key都无法获取到数据,达到缓存穿透的目的,达到根据平台或命名空间清除缓存集的效果。

在应用了本方法的一具体实施例中,外部接口或数据库中存有数据:20191119;

第一入口第一次请求,业务系统首先到缓存中获取缓存动作key(命名空间)

系统会先往缓存系统中存入一个以命名空间为key,以0为数据的缓存,例如命名空间为common即缓存的key为common,缓存的版本号为0,系统再次以key的生成方式组合成wx-common-xxx-0-yyyy分别代表(平台-命名空间-类名-命名空间版本号-识别码),并按照这个key到缓存系统中获取数据,由于第一次请求,无法获取到数据。

系统将从接口或数据库中获取数据(20191119)并存入缓存系统中,缓存系统中存储的内容key为wx-common-xxx-0-yyyy缓存内容为20191119;

系统再次受到请求(无论是第一入口或者是其他如第二入口),业务系统按照命名空间common作为key到缓存系统中获取到版本号为0并按key的生成规则生成key为wx-common-xxx-0-yyyy从缓存系统中获取到数据。通过上述缓存方案,能够使得多用户原本要从数据库中调用内容的操作(需要浪费很多数据库访问时间,并且使得数据库安全性下降)变得可以在缓存系统中就完成调用,节省了常用数据调用的时间,提高了整个系统的数据管理效率。

而进一步的,还包括步骤,拦截对数据库中数据的操作,将变动数据的在缓存服务器中对应的命名空间版本号更新。当权限人员,如管理员或后台操作人员,通过第三入口对数据库进行处理,更改上述数据(20191119),则该更改操作对数据表的注解设置的命名空间为common。

系统拦截到对于(20191119)的更改操作,对命名空间common存储在缓存中的版本号进行计数累加0+1累加后的版本号为1并存入缓存系统,现缓存系统中存储命名空间common的key为common的版本号1,而后台数据库中的数据(20191119)可能已经被修改为(20191120)。用户再次请求调用上述命名空间内的数据,则我们不希望他从缓存中获取,因为缓存中记录的版本已经跟数据库中的内容不同,业务系统再次收获取到版本号为0并按key的生成规则生成key为wx-common-xxx-0-yyyy的请求;按照该key到缓存系统中无法获取到数据,缓存穿透之后只能再向数据库中调取命名空间common中的数据为(20191120)。实现不同入口的更改数据操作能够无效化缓存中记录,最终结合前述清除操作能够清除前端缓存的目的。

一种多入口数据缓存存储介质,存储有计算机程序,所述计算机程序在被运行时执行包括如下步骤,拦截原缓存调用请求,根据该缓存调用请求生成密钥key,

所述密钥key的生成规则为:入口平台代码+命名空间+类名+命名空间版本号+识别码;

使用上述密钥在缓存服务器中进行数据调用,若获取得到数据,则将数据返回,若未命中数据,则直接使用原缓存调用请求获取数据库中数据,并将该数据及对应的密钥key存储在缓存服务器中。

具体地,所述计算机程序在被运行时还执行包括步骤,将该数据及对应的密钥key进行序列化后存储在缓存服务器中。

具体地,所述计算机程序在被运行时还执行包括步骤,判断密钥key中的版本号是否存在于缓存服务器,当判定为不存在于缓存服务器中时,进行步骤,直接使用原缓存调用请求获取数据库中数据。

具体地,所述计算机程序在被运行时还执行包括步骤,拦截对数据库中数据的操作,将变动数据的在缓存服务器中对应的命名空间版本号更新。

需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1