一种可扩展缓存访问方法、系统、装置及存储介质制造方法及图纸

技术编号:34456887 阅读:15 留言:0更新日期:2022-08-06 17:04
本发明专利技术涉及计算机技术领域,具体公开了一种可扩展缓存访问方法、系统、装置及存储介质;其中方法包括:通过AOP方式将缓存组件接入到项目中,生成类的动态代理对象,使缓存组件在开启缓存注解的条件下生效;在缓存组件内部定义一个接口,通过该接口扩展不同的缓存类型。采用本发明专利技术的技术方案能够大大减少了重复代码的编写,并且可以做到统一的进行修改,给开发人员带来了极大的方便,同时也给使代码更加简洁,满足不同场景的使用需求。满足不同场景的使用需求。满足不同场景的使用需求。

【技术实现步骤摘要】
一种可扩展缓存访问方法、系统、装置及存储介质


[0001]本专利技术涉及计算机
,特别涉及一种可扩展缓存访问方法、系统、装置及存储介质。

技术介绍

[0002]微服务的架构具有能够应对高并发场景的优势,解决这种高并发场景的方法包括缓存、限流、降级等,其中缓存是比较重要的方法之一。缓存查询是直接读取内存中的数据,不用去数据库进行比较耗时的SQL操作,从而提高查询效率,提高系统的并发性能。
[0003]在基于微服务的架构中,很多的模块都基于java开发。Java应用中,缓存的方式比较多,比如常见的Redis、Spring缓存、Google Guava Cache等,不同的缓存有不同的特点,比如Redis缓存,属于第三方缓存,在集群环境中可以做到缓存一致,可将缓存数据持久化,单线程执行,不用加锁,基于内存,吞吐量高等优点;而Guava Cache和Spring缓存就是一个本地缓存,在集群环境中,不能做到缓存一致性,而且属于本地缓存,不会持久化,停机后数据就丢失,但这属于应用内的缓存,调用效率高,并且都采用java语言编写,可以定制化一些需求。
[0004]在一般的项目中,如果使用多种缓存,会增加编码的复杂性,所以更多的是单独用某一种缓存。同时还有的直接使用原生的缓存API,但是每个需要缓存的地方,都需要去写类似的代码,也偏复杂。如何在项目中通过一套统一的缓存,可以满足不同场景的需求,成为一个需要解决的问题。

技术实现思路

[0005]本专利技术的目的之一在于,提供一种可扩展缓存访问方法,能够减少缓存相关代码的重复编写,满足不同场景的使用需求。
[0006]为了解决上述技术问题,本申请提供如下技术方案:
[0007]一种可扩展缓存访问方法,包括:通过AOP方式将缓存组件接入到项目中,生成类的动态代理对象,使缓存组件在开启缓存注解的条件下生效;在缓存组件内部定义一个接口,通过该接口扩展不同的缓存类型。
[0008]基础方案原理及有益效果如下:
[0009]面向切面编程思想能够在不修改源代码的情况下给程序动态统一添加功能。这样在一个项目中途需要某个功能时,只需修改配置文件和加一个类,不用改已经写好的类的代码,增加了代码的复用性。本方案基于面向切面编程的思想,通过AOP方式实接入缓存组件到项目中,然后开启缓存注解缓存组件才可生效,否则缓存组件不生效。能够很好的支持横向扩展。在项目启动过程中,生成目标类的动态代理对象,这种基于AOP的方式,大大减少了重复代码的编写,并且可以做到统一的进行修改,给开发人员带来了极大的方便,同时也给使代码更加简洁。
[0010]本方案通过缓存扩展性设计,能够使代码更加简洁并且极大的方便开发。不同的
缓存类型,会有不同的具体实现逻辑,相应也有不同的优势和劣势,用户可了解每一种缓存类型的优势和劣势之后,根据需求进行缓存类型参数的设置,以选择合适的缓存,以满足不同场景的使用需求。
[0011]进一步,所述缓存注解包括若干属性,设置缓存注解属性的参数,如果没有设置属性的参数,则使用默认属性参数;
[0012]属性包括:缓存的key、缓存类型、缓存过期时间、是否抛出异常和是否同步操作。
[0013]对缓存注解的属性设置不同的参数,使其满足不同场景的缓存需求。
[0014]进一步,所述缓存组件还集成有Redis缓存类型和自定义缓存类型;
[0015]还包括查询步骤:
[0016]接收用户的查询请求,命中缓存的数据就直接返回数据,没有命中缓存的数据,则根据不同类型缓存,执行数据库查询操作:
[0017]如果用户选择Redis缓存类型,在用户主动查询数据库之后,如果成功查询到数据,根据缓存注解的属性,同步设置该数据到缓存;
[0018]如果用户选择自定义缓存类型,在缓存中的数据过期之后,异步查询所需要的数据,并将数据设置到缓存。
[0019]进一步,所述查询步骤具体包括:
[0020]获取用户查询请求并解析,通过设置的缓存类型找到指定的缓存;
[0021]如果对应的缓存类型不存在,或者没有对应的缓存实现类,打印错误日志;
[0022]如果对应的缓存类型存在,则在指定的缓存进行下一步操作:
[0023]如果缓存中有数据,并且没有过期,直接返回缓存的数据;
[0024]如果没有找到对应的数据,则根据缓存类型的不同,采取不同的处理方式:
[0025]如果为Redis缓存类型,缓存中数据过期,并且过期数据已被剔除,同步去数据库查询,并返回对应的实时数据;
[0026]如果为自定义缓存类型,缓存中数据过期,数据仍然在缓存中,返回旧数据,并进行异步查询数据库,然后将查询到的数据库结果替换缓存中过期的数据。
[0027]通过打印具体的错误日志,提示用户选择的缓存类型不存在,此时缓存处于不生效状态,且每次请求都会有日志告警,提示用户进行相应的处理。
[0028]自定义缓存,可以较好的防穿透,用户请求进来的时候,如果设置了对应的缓存,并指定的该自定义缓存,那么每次查询都是从该缓存中获取数据。如果查询该缓存数据为空,那么内部就将开启一个线程去异步的进行数据库的查询。当应对高并发的时候,可能有大量的用户去访问同一个key,而该key对应的value并不存在,那么可能就会导致多个线程同时查询数据库,造成数据库压力过大。考虑到这种情况,缓存中没有对应数据,才会去进行数据库的查询,然后将查询到的结果设置到缓存,如果有对应的缓存,就直接返回,能够有效应对并发量大的场景。
[0029]本专利技术的目的之二在于,提供一种可扩展缓存访问系统,包括:缓存组件;
[0030]缓存组件通过AOP方式接入到项目中,缓存组件用于生成类的动态代理对象,缓存组件在开启缓存注解的条件下生效;
[0031]缓存组件包括至少一个接口,接口用于扩展不同的缓存类型。
[0032]面向切面编程思想能够在不修改源代码的情况下给程序动态统一添加功能。这样
在一个项目中途需要某个功能时,只需修改配置文件和加一个类,不用改已经写好的类的代码,增加了代码的复用性。本方案基于面向切面编程的思想,将缓存组件通过AOP方式实接入缓存组件到项目中,然后开启缓存注解缓存组件才可生效,否则缓存组件不生效。能够很好的支持横向扩展。在项目启动过程中,生成目标类的动态代理对象,这种基于AOP的方式,大大减少了重复代码的编写,并且可以做到统一的进行修改,给开发人员带来了极大的方便,同时也给使代码更加简洁。
[0033]本方案通过缓存扩展性设计,能够使代码更加简洁并且极大的方便开发。不同的缓存类型,会有不同的具体实现逻辑,相应也有不同的优势和劣势,用户可了解每一种缓存类型的优势和劣势之后,根据需求进行缓存类型参数的设置,以选择合适的缓存,以满足不同场景的使用需求。
[0034]进一步,所述缓存注解包括若干属性,设置缓存注解属性的参数,如果没有设置属性的参数,则使用默认属性参本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种可扩展缓存访问方法,其特征在于,包括:通过AOP方式将缓存组件接入到项目中,生成类的动态代理对象,使缓存组件在开启缓存注解的条件下生效;在缓存组件内部定义一个接口,通过该接口扩展不同的缓存类型。2.根据权利要求1所述的可扩展缓存访问方法,其特征在于:所述缓存注解包括若干属性,设置缓存注解属性的参数,如果没有设置属性的参数,则使用默认属性参数;属性包括:缓存的key、缓存类型、缓存过期时间、是否抛出异常和是否同步操作。3.根据权利要求2所述的可扩展缓存访问方法,其特征在于:所述缓存组件还集成有Redis缓存类型和自定义缓存类型;还包括查询步骤:接收用户的查询请求,命中缓存的数据就直接返回数据,没有命中缓存的数据,则根据不同类型缓存,执行数据库查询操作:如果用户选择Redis缓存类型,在用户主动查询数据库之后,如果成功查询到数据,根据缓存注解的属性,同步设置该数据到缓存;如果用户选择自定义缓存类型,在缓存中的数据过期之后,异步查询所需要的数据,并将数据设置到缓存。4.根据权利要求3所述的可扩展缓存访问方法,其特征在于:所述查询步骤具体包括:获取用户查询请求并解析,通过设置的缓存类型找到指定的缓存;如果对应的缓存类型不存在,或者没有对应的缓存实现类,打印错误日志;如果对应的缓存类型存在,则在指定的缓存进行下一步操作:如果缓存中有数据,并且没有过期,直接返回缓存的数据;如果没有找到对应的数据,则根据缓存类型的不同,采取不同的处理方式:如果为Redis缓存类型,缓存中数据过期,并且过期数据已被剔除,同步去数据库查询,并返回对应的实时数据;如果为自定义缓存类型,缓存中数据过期,数据仍然在缓存中,返回旧数据,并进行异步查询数据库,然后将查询到的数据库结果替换缓存中过期的数据。5.一种可扩展缓存访问系统,其特征在于,包括:缓存组件;缓存组件通过AOP方式接入到项目中,缓存组件用于生成类的动态代理对象,缓存组件在开启缓存注解的条件下生效;缓存组件包括至少一个接口,接口用于扩展不同...

【专利技术属性】
技术研发人员:华锋张尧郭子文朱明星陈林
申请(专利权)人:航天新通科技有限公司
类型:发明
国别省市:

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

1