缓存公共组件及其实现、安装与运行方法技术

技术编号:31084705 阅读:13 留言:0更新日期:2021-12-01 12:35
本申请提供一种缓存公共组件及其实现、安装与运行方法,实现方法包括:S100注解申明及参数申明格式处理;S200注解解析配置;S300一级缓存封装:对分布式缓存的Redis的API进行封装,利用spring动态配置在加载时注入应用,以实现对第三方缓存的适配;S400二级缓存封装:使用map键值对的结构来实现本地缓存进行封装获得所述map结构,封装中对所述map的结构本身进行分区,并引入数据自动清除机制,用于在容量满或数据缓存时间到期时进行数据自动清除;S500可视化实现:使用vue实现前端可视化界面组件,以树形列表的形式展示当前缓存的内容。本方案使得缓存访问无网络请求开销,访问快,且可防止缓存穿透,具有更好的通用性和扩展性。性。性。

【技术实现步骤摘要】
缓存公共组件及其实现、安装与运行方法


[0001]本专利技术属于计算机
,尤其涉及一种缓存公共组件及其实现、安装与运行方法。

技术介绍

[0002]虽然有很多开源的缓存组件可以供使用,但是它往往并不是说加入到项目中就能起到多样化需求的作用,比如redis一般集成到的spring环境中来,解决在分布式缓存数据的问题,但是却无法解决它自身如果因为键值过期出现雪崩、或者redis服务本身因为网络、服务器宕机等因素带来的风险,特别是在高并发类场景,会直接导致主服务和数据库连接被打满,出现响应延迟、甚至最终资源耗尽被拖垮荡机的风险。
[0003]同时,现在数据库、数据库连接中间件等也提供了相关缓存技术,但是根本无法达到使用预期,例如mysql数据库自身就有Query Cache缓存技术,但是其本身只要因为表有更新发生,就会清除,实际环境中无法达到对一些补偿变更数据访问的快速响应以及扩展,并且mysql自身连接资源、网络资源都是有限的,同时也是技术架构访问链路得最底层,按照架构体系来说缓存也该前置才合理。
[0004]因此,除了有分布式缓存的同时,还应该有二级本地缓存来支撑,以防止缓存穿透以及分布式缓存失去服务能力的状况。但是服务本身能使用得缓存又遇到了无法适应多样化需求得情形,如:不能根据业务要求针对性的设置有效期以及自动删除等需要;同时原始应用场景查找、清除缓存都需要通过第三方的运维工具来进行,难以满足紧急情况下的需要,如出现了数据库和缓存不一致,排查问题都需要运维或直接登录其它运维介质来进行命令话的方式排查,极大的增加了运维难度。

技术实现思路

[0005]针对上述相关现有技术不足,本专利技术提供一种缓存公共组件及其实现、安装与运行方法,缓存访问无网络请求开销,访问快,且可防止缓存穿透,具有更好的通用性和扩展性。
[0006]为了实现本专利技术的目的,拟采用以下方案:一种缓存公共组件实现方法,包括步骤:S100、注解申明及参数申明格式处理:通过java的@interface类进行自定义注解分布式缓存@DistributeCache,注解使用定义在接口函数入口处,并说明默认开启缓存服务,在所述java的@interface类中定义当前注解的配置参数,配置参数包括时间参数、控制参数、唯一key;时间参数包括自定义过期时间,若用户没有进行自定义事件配置,则启用默认过期时间;自定义过期时间或默认过期时间用于定义一级缓存中的过期时间、二级缓存中的过期时间;控制参数包括接口层面控制参数和全局配置参数。接口层面的控制参数,如:
isOpen函数为接口处的申明,可以灵活的让当前接口启用或不启用缓存设置,方便后期测试、维护;全局配置参数,在应用的配置文件中进行配置,程序启动加载后赋值给globalIsOpen,其优先级最高,如果有全局配置存在,则接口处的isOpen不会再生效,会以全局缓存配置来开启或关闭当前应用中需要缓存功能的接口。globalisOpen为应用中总配置文件的配置,用于作为最高优先级一全局缓存配置来开启或关闭当前应用中使用了缓存注解分布式缓存@DistributeCache的接口函数的缓存;唯一key用于在缓存的map结构存储中查找对应的缓存值 ;参数申明格式以":"分割,用于适合Redis中的结构,后台程序也以":"来进行分割;S200、注解解析配置:通过Spring的@component实现切面类自动装载,并结合@Aspect进行切面类的申明,以实现对当前包含缓存注解的接口函数的切入,并调用预先配置的公共处理模块中的解析接口来获取注解申明中的配置参数;所述公共处理模块,用于获得接口申明参数、进入解析过程中,并在解析过程中获取和解析接口出定义的注解参数,再分别对一级缓存、二级缓存根据唯一key进行数据查找,如果在一级缓存、二级缓存中找到了属于有效期内的数据则直接返回给接口调用的客户端,否则会执行原接口自己的数据查找逻辑,在返回结果前,调用一级缓存或二级缓存的存储接口把数据保存到一级缓存或二级缓存中并设置缓存有效期;所述处于有效期内是根据自定义过期时间判断;S300、一级缓存封装:对分布式缓存的Redis的API进行封装,利用spring动态配置在加载时注入应用,以实现对第三方缓存的适配;S400、二级缓存封装:使用map键值对的结构来实现本地缓存进行封装获得所述map结构,封装中对所述map的结构本身进行分区,并引入数据自动清除机制,所述数据自动清除机制通过使用LRU算法实现,用于在容量满或数据缓存时间到期时进行数据自动清除;S500、可视化实现:使用vue实现前端可视化界面组件,以树形列表的形式展示当前缓存的内容。
[0007]进一步,使用LRU算法实现在容量满或数据缓存时间到期时进行数据自动清除,包括步骤:以队列形式在容器内进行数据缓存;根据调用时间对队列中缓存的数据进行排序,以距离调用时间距离当前时间最近的缓存数据放在队列头部位置;在容量满时,自动按照预设比例从队列尾部开始清除缓存数据,所述比例是指需要清除的缓存数据所占整个队列的比例;对于数据缓存时间到期的缓存数据进行直接删除。
[0008]一种缓存公共组件,通过缓存公共组件实现方法获得,包括:一级缓存,用于作为第一层缓存架构,通过对分布式缓存的Redis的API进行封装实现,通过在所述一级缓存中利用spring动态配置在加载时注入应用,以实现所述一级缓存对第三方缓存的适配;二级缓存,通过map键值对的结构来实现本地缓存进行封装,所述map的结构本身
具有分区;所述二级缓存具有数据自动清除功能,所述据自动清除功能用于在容量满或数据缓存时间到期时进行数据自动清除,所述数据自动清除功能通过使用LRU算法实现;所述map的结构中key为缓存的唯一标识,值为一个缓存的对象结构体,所述对象结构体包含了当前缓存对象的具体数据信息、过期时间数据,用于在每次访问时判断当前缓存对象是否到期;可视化组件,通过使用vue实现,用于以树形列表的形式展示当前缓存的内容,所述可视化组件的一级菜单分别是分布式缓存和本地缓存,二级菜单则是当前缓存的唯一key,响应于对唯一key的点击,所述可视化组件可显示出具体存放的值和有效期内容;所述可视化组件的菜单提供查询及清除功能,用于根据输入的查询内容实现对Redis和本地缓存的查找及清除。
[0009]一种缓存公共组件的安装方法,包括步骤:在pom文件中引入组件依赖包;在启动类中开启切面@EnableAspectJAutoProxy支持;在需要配置的接口入口处增加配置注解。
[0010]一种缓存公共组件的运行方法,包括步骤:接收到达应用层的外部请求;对当前外部请求所调用的具体响应服务缓存注解进行解析,获取当前响应服务收到的查询参数和函数注解中定义的唯一key参数、缓存过期参数、是否开启一级或二级缓存参数,并封装成一个缓存对象;在一级缓存中查找当前请求的唯一key是否存在:若在一级缓存中找到所述唯一key,且当前缓存对象处于有效期内时,返回当前缓存的对象;若在一级缓存中没找到所述唯一key,则在二级缓存中本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种缓存公共组件实现方法,其特征在于,包括步骤:S100、注解申明及参数申明格式处理:通过java的@interface类进行自定义注解分布式缓存@DistributeCache,注解使用定义在接口函数入口处,并说明默认开启缓存服务,在所述java的@interface类中定义当前注解的配置参数,配置参数包括时间参数、控制参数、唯一key;时间参数包括自定义过期时间,若用户没有进行自定义事件配置,则启用默认过期时间;自定义过期时间或默认过期时间用于定义一级缓存中的过期时间、二级缓存中的过期时间;控制参数包括用于控制接口层面的开关参数以及全局配置参数,用于控制接口层面的开关参数包括为接口处的申明的isOpen函数,用于让当前接口启用或不启用缓存设置;全局控制参数,在应用配置文件中进行配置,包括globalIsOpen参数,用于作为最高优先级一全局缓存配置来开启或关闭当前应用中使用了缓存注解分布式缓存@DistributeCache的接口函数的缓存;唯一key用于在缓存的map结构存储中查找对应的缓存值;参数申明格式以":"分割,用于适合Redis中的结构,后台程序也以":"来进行分割;S200、注解解析配置:通过Spring的@component实现切面类自动装载,并结合@Aspect进行切面类的申明,以实现对当前包含缓存注解的接口函数的切入,并调用预先配置的公共处理模块中的解析接口来获取注解申明中的配置参数;所述公共处理模块,用于获得接口申明参数、进入解析过程中,并在解析过程中获取和解析接口出定义的注解参数,再分别对一级缓存、二级缓存根据唯一key进行数据查找,如果在一级缓存、二级缓存中找到了属于有效期内的数据则直接返回给接口调用的客户端,否则会执行原接口自己的数据查找逻辑,在返回结果前,调用一级缓存或二级缓存的存储接口把数据保存到一级缓存或二级缓存中并设置缓存有效期;所述处于有效期内是根据自定义过期时间判断;S300、一级缓存封装:对分布式缓存的Redis的API进行封装,利用spring动态配置在加载时注入应用,以实现对第三方缓存的适配;S400、二级缓存封装:使用map键值对的结构来实现本地缓存进行封装获得所述map结构,封装中对所述map的结构本身进行分区,并引入数据自动清除机制,所述数据自动清除机制通过使用LRU算法实现,用于在容量满或数据缓存时间到期时进行数据自动清除;S500、可视化实现:使用vue实现前端可视化界面组件,以树形列表的形式展示当前缓存的内容。2.根据权利要求1所述的缓存公共组件实现方法,其特征在于,使用LRU算法实现在容量满或数据缓存时间到期时进行数据自动清除,包括步骤:以队列形式在容器内进行数据缓存;根据调用时间对队列中缓存的数据进行排序,以距离调用时间距离当前时间最近的缓存数据放在队列头部位置;在容量满时,自动按照预设比例从队列尾部开始清除缓存数据,所述比例是指需要清除的缓存数据所占整个队列的比例;
对于数据缓存时间到期的缓存数据进行直接删除。3.一种缓存公共组件,其特征在于,通...

【专利技术属性】
技术研发人员:闫文
申请(专利权)人:成都民航西南凯亚有限责任公司
类型:发明
国别省市:

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

1