CN111596922A - 基于redis实现自定义缓存注解的方法 - Google Patents
基于redis实现自定义缓存注解的方法 Download PDFInfo
- Publication number
- CN111596922A CN111596922A CN202010412202.2A CN202010412202A CN111596922A CN 111596922 A CN111596922 A CN 111596922A CN 202010412202 A CN202010412202 A CN 202010412202A CN 111596922 A CN111596922 A CN 111596922A
- Authority
- CN
- China
- Prior art keywords
- cache
- annotation
- redis
- value
- attribute
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 95
- 230000007246 mechanism Effects 0.000 claims description 3
- 238000012545 processing Methods 0.000 claims description 3
- 230000001960 triggered effect Effects 0.000 claims description 3
- 238000013523 data management Methods 0.000 claims description 2
- 238000010168 coupling process Methods 0.000 abstract description 2
- 238000005859 coupling reaction Methods 0.000 abstract description 2
- 238000011161 development Methods 0.000 abstract description 2
- 238000012423 maintenance Methods 0.000 abstract description 2
- 238000012360 testing method Methods 0.000 abstract description 2
- 230000009471 action Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种基于redis实现自定义缓存注解的方法,属于及微服务架构技术领域,基于redis实现自定义注解缓存的方法,将业务数据通过注解的形式计入缓存,然后各个业务子系统根据需求直接从注解中获取数据,包括:SpringAOP切面编程、获取自定义注解、结合redis进行数据管理。本专利按照低耦合易部署的理论和方法,提出了用自定义redis实现注解来管理和完善业务需求,通过注解的方式完美的解决了应用系统代码的冗余和重复编写,可以让系统自身的需求达到可控的目的。也大大提高了系统性能,并且减少了运维成本,提高开发效率,而且还可以协助开发人员进行白盒测试。
Description
技术领域
本发明涉及微服务架构技术领域,具体地说是一种基于redis实现自定义缓存注解的方法,更具体的说是一种基于技术组件去管理业务数据的行为,比如存储横跨不同的应用、不同的服务器之间的业务数据的实现方法。
背景技术
当前,随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络。
当某一个应用产生某些业务数据时,其背后可能有很多的业务模块去使用这个业务模块提供的数据,实现“数据共享管理”。
随着微服务架构的流行,服务按照不同的维度进行拆分,一个完整的项目可能就需要被拆分成好几个业务模块。同时每一个业务模块可能都需要共同的基础业务数据,比如用户的基本信息,销售商品的状态等等,或者不同的业务模块之间需要业务数据的同步或者通知以便业务数据记录的变更。因此,就需要一些可以共享和存储管理业务数据或者临时数据的工具。
发明内容
本发明的技术任务是解决现有技术的不足,提供一种基于redis实现自定义缓存注解的方法。
本发明解决其技术问题所采用的技术方案是:
基于redis实现自定义缓存注解的方法,基于redis实现自定义注解缓存的方法,将业务数据通过注解的形式计入缓存,然后各个业务子系统根据需求直接从注解中获取数据。
可选地,包括:SpringAOP切面编程、获取自定义注解、结合redis进行数据管理。
可选地,基于SpringAOP切面编程缓存注解说明:
@Cacheable@CachePut@CacheEvict(多个展示使用空格分隔)
@Cacheable:用于根据方法的请求参数对其结果进行缓存;
@CachePut:用于根据方法的请求参数对其结果进行缓存,与@Cacheable不同的是,它每次都会触发真实方法的调用;
@CacheEvict:用于根据一定的条件对缓存进行清空。
可选地,所述自定义注解是指通过spring的Annontation引入的新特征,提供一种安全的类似注释的机制,用来将任何的信息或元数据与程序元素进行关联。
可选地,结合redis进行数据管理是指:
1)缓存先从redis读,当读取不到直接去检索数据库;
2)redis缓存后mq发送消息通知。
可选地,所述@Cacheable标记在一个类上或标记在一个方法上,当标记在一个类上时表示该类所有的方法都是支持缓存的,当标记在一个方法上是表示该方法是支持缓存的。
可选地,所述@Cacheable指定三个属性,value、key和condition,其中:
Value:value属性是必须指定的,其表示当前方法的返回值是会被缓存在哪个Cache上的,对应Cache的名称.
Key:key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式。当我们没有指定该属性时,将使用默认策略生成key,key生成策略自定义;
Condition:其值是通过SpringEL表达式来指定的,当为true时表示进行缓存处理;当为false时表示不进行缓存处理,即每次调用该方法时该方法都会执行一次;
对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。
可选地,所述@CacheEvict指定的属性有value、key、condition、beforeInvocation。
可选地,beforeInvocation是指:清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。
可选地,使用beforeInvocation可以改变触发清除操作的时间,当我们指定该属性值为true时,会在调用该方法之前清除缓存中的指定元素。
本发明的一种基于redis实现自定义缓存注解的方法与现有技术相比所产生的有益效果是:
本专利按照低耦合易部署的理论和方法,提出了用自定义redis实现注解来管理和完善业务需求,通过注解的方式完美的解决了应用系统代码的冗余和重复编写,可以让系统自身的需求达到可控的目的。也大大提高了系统性能,并且减少了运维成本,提高开发效率,而且还可以协助开发人员进行白盒测试。
附图说明
为了更清楚地描述本发明一种基于redis实现自定义缓存注解的方法的工作原理,下面将附上简图作进一步说明。
附图1是本发明一种基于redis实现自定义缓存注解的方法的结构图。
具体实施方式
下面将结合本发明实施例中的附图1,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
redis作为一个开源的高性能的key-value存储系统,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set--有序集合)和hash(哈希类型),支持主从同步,他可以从主服务器向任意数量的从服务器上同步。目前我们正是使用redis这种特性,融入系统中,更好的实现管理共享数据的目的。
如附图1所示,本发明提供一种基于redis实现自定义缓存注解的方法,基于redis实现自定义注解缓存的方法,将业务数据通过注解的形式计入缓存,然后各个业务子系统根据需求直接从注解中获取数据,主要包括:SpringAOP切面编程、获取自定义注解、结合redis进行数据管理。
其中基于SpringAOP切面编程缓存注解说明:
@Cacheable@CachePut@CacheEvict(多个展示使用空格分隔)
@Cacheable:用于根据方法的请求参数对其结果进行缓存;
@CachePut:用于根据方法的请求参数对其结果进行缓存,与@Cacheable不同的是,它每次都会触发真实方法的调用;
@CacheEvict:用于根据一定的条件对缓存进行清空。
其中自定义注解是指通过spring的Annontation引入的新特征,提供一种安全的类似注释的机制,用来将任何的信息或元数据与程序元素进行关联。
考虑到根据我们使用缓存的场景能够达到自由控制的效果,本系统目前对spring三种注解进行了改造,能够达到让系统使用redis缓存更加可控,并且实现自己所需要的需求,如,1.缓存先从redis读,当读取不到直接去检索数据库;2.redis缓存后mq发送消息通知。等等的需求均达到可控的效果。
在上述方案基础上,@Cacheable标记在一个类上或标记在一个方法上,当标记在一个类上时表示该类所有的方法都是支持缓存的,当标记在一个方法上是表示该方法是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。Spring在缓存方法的返回值时是以键值对进行缓存的,值就是方法的返回结果,至于键的话,Spring又支持两种策略,默认策略和自定义策略,这个稍后会进行说明。需要注意的是当一个支持缓存的方法在对象内部被调用时是不会触发缓存功能的。
在上述方案基础上,@Cacheable指定三个属性,value、key和condition,其中:
Value:value属性是必须指定的,其表示当前方法的返回值是会被缓存在哪个Cache上的,对应Cache的名称.
Key:key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式。当我们没有指定该属性时,将使用默认策略生成key,key生成策略自定义;
Condition:其值是通过SpringEL表达式来指定的,当为true时表示进行缓存处理;当为false时表示不进行缓存处理,即每次调用该方法时该方法都会执行一次;
在上述方案基础上,@CacheEvict指定的属性有value、key、condition、beforeInvocation。beforeInvocation是指:清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。使用beforeInvocation可以改变触发清除操作的时间,当我们指定该属性值为true时,会在调用该方法之前清除缓存中的指定元素。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (10)
1.基于redis实现自定义缓存注解的方法,其特征在于,基于redis实现自定义注解缓存的方法,将业务数据通过注解的形式计入缓存,然后各个业务子系统根据需求直接从注解中获取数据。
2.根据权利要求1所述的基于redis实现自定义缓存注解的方法,其特征在于,包括:SpringAOP切面编程、获取自定义注解、结合redis进行数据管理。
3.根据权利要求2所述的基于redis实现自定义缓存注解的方法,其特征在于,基于SpringAOP切面编程缓存注解说明:
@Cacheable@CachePut@CacheEvict(多个展示使用空格分隔)
@Cacheable:用于根据方法的请求参数对其结果进行缓存;
@CachePut:用于根据方法的请求参数对其结果进行缓存,与@Cacheable不同的是,它每次都会触发真实方法的调用;
@CacheEvict:用于根据一定的条件对缓存进行清空。
4.根据权利要求2或3所述的基于redis实现自定义缓存注解的方法,其特征在于,所述自定义注解是指通过spring的Annontation引入的新特征,提供一种安全的类似注释的机制,用来将任何的信息或元数据与程序元素进行关联。
5.根据权利要求2或3所述的基于redis实现自定义缓存注解的方法,其特征在于,结合redis进行数据管理是指:
1)缓存先从redis读,当读取不到直接去检索数据库;
2)redis缓存后mq发送消息通知。
6.根据权利要求3所述的基于redis实现自定义缓存注解的方法,其特征在于,所述@Cacheable标记在一个类上或标记在一个方法上,当标记在一个类上时表示该类所有的方法都是支持缓存的,当标记在一个方法上是表示该方法是支持缓存的。
7.根据权利要求3所述的基于redis实现自定义缓存注解的方法,其特征在于,所述@Cacheable指定三个属性,value、key和condition,其中:
Value:value属性是必须指定的,其表示当前方法的返回值是会被缓存在哪个Cache上的,对应Cache的名称.
Key:key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式。当我们没有指定该属性时,将使用默认策略生成key,key生成策略自定义;
Condition:其值是通过SpringEL表达式来指定的,当为true时表示进行缓存处理;当为false时表示不进行缓存处理,即每次调用该方法时该方法都会执行一次;
对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。
8.根据权利要求3所述的基于redis实现自定义缓存注解的方法,其特征在于,所述@CacheEvict指定的属性有value、key、condition、beforeInvocation。
9.根据权利要求8所述的基于redis实现自定义缓存注解的方法,其特征在于,beforeInvocation是指:清除操作默认是在对应方法成功执行之后触发的,即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。
10.根据权利要求8或9所述的基于redis实现自定义缓存注解的方法,其特征在于,使用beforeInvocation可以改变触发清除操作的时间,当我们指定该属性值为true时,会在调用该方法之前清除缓存中的指定元素。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010412202.2A CN111596922A (zh) | 2020-05-15 | 2020-05-15 | 基于redis实现自定义缓存注解的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010412202.2A CN111596922A (zh) | 2020-05-15 | 2020-05-15 | 基于redis实现自定义缓存注解的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111596922A true CN111596922A (zh) | 2020-08-28 |
Family
ID=72182707
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010412202.2A Pending CN111596922A (zh) | 2020-05-15 | 2020-05-15 | 基于redis实现自定义缓存注解的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111596922A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112181804A (zh) * | 2020-08-31 | 2021-01-05 | 五八到家有限公司 | 一种参数校验方法、设备以及存储介质 |
CN112507067A (zh) * | 2020-11-30 | 2021-03-16 | 厦门海西医药交易中心有限公司 | 一种缓存插入式注解器及注解方法 |
CN112506961A (zh) * | 2020-12-28 | 2021-03-16 | 浪潮云信息技术股份公司 | 一种提高数据查询效率的方法 |
CN112506971A (zh) * | 2020-12-14 | 2021-03-16 | 福建福讯人才服务有限公司 | 一种基于redis的自动化数据缓存方法及系统 |
CN112540834A (zh) * | 2020-12-18 | 2021-03-23 | 郑州阿帕斯数云信息科技有限公司 | 一种分布式事务中的缓存处理方法、装置及其设备 |
CN113282621A (zh) * | 2021-04-23 | 2021-08-20 | 北京皮尔布莱尼软件有限公司 | 一种缓存数据的处理方法及计算设备 |
CN113722363A (zh) * | 2021-08-19 | 2021-11-30 | 成都民航西南凯亚有限责任公司 | 缓存公共组件及其实现、安装与运行方法 |
CN115408371A (zh) * | 2022-10-31 | 2022-11-29 | 之江实验室 | 一种redis数据库动态冗余部署方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107463378A (zh) * | 2017-07-28 | 2017-12-12 | 深圳市丰巢科技有限公司 | 一种基于注解的本地缓存实现方法、存储设备及电子设备 |
CN110633299A (zh) * | 2019-08-19 | 2019-12-31 | 中国平安财产保险股份有限公司 | 业务数据的缓存方法、装置、计算机设备及存储介质 |
CN110737680A (zh) * | 2019-09-23 | 2020-01-31 | 贝壳技术有限公司 | 缓存数据管理方法、装置、存储介质及电子设备 |
-
2020
- 2020-05-15 CN CN202010412202.2A patent/CN111596922A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107463378A (zh) * | 2017-07-28 | 2017-12-12 | 深圳市丰巢科技有限公司 | 一种基于注解的本地缓存实现方法、存储设备及电子设备 |
CN110633299A (zh) * | 2019-08-19 | 2019-12-31 | 中国平安财产保险股份有限公司 | 业务数据的缓存方法、装置、计算机设备及存储介质 |
CN110737680A (zh) * | 2019-09-23 | 2020-01-31 | 贝壳技术有限公司 | 缓存数据管理方法、装置、存储介质及电子设备 |
Non-Patent Citations (2)
Title |
---|
ORANGESSS_: "《Spring AOP结合Redis利用自定义注解实现通用缓存》", 《HTTPS://BLOG.CSDN.NET/ORANGESSS_/ARTICLE/DETAILS/82564077》 * |
夏至微凉、: "《@Cacheable缓存注解(以Redis作为缓存)》", 《HTTPS://BLOG.CSDN.NET/QQ_31404603/ARTICLE/DETAILS/88081039》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112181804A (zh) * | 2020-08-31 | 2021-01-05 | 五八到家有限公司 | 一种参数校验方法、设备以及存储介质 |
CN112181804B (zh) * | 2020-08-31 | 2023-09-08 | 五八到家有限公司 | 一种参数校验方法、设备以及存储介质 |
CN112507067A (zh) * | 2020-11-30 | 2021-03-16 | 厦门海西医药交易中心有限公司 | 一种缓存插入式注解器及注解方法 |
CN112507067B (zh) * | 2020-11-30 | 2022-08-23 | 厦门海西医药交易中心有限公司 | 一种缓存插入式注解器及注解方法 |
CN112506971A (zh) * | 2020-12-14 | 2021-03-16 | 福建福讯人才服务有限公司 | 一种基于redis的自动化数据缓存方法及系统 |
CN112540834B (zh) * | 2020-12-18 | 2023-04-14 | 郑州阿帕斯数云信息科技有限公司 | 一种分布式事务中的缓存处理方法、装置及其设备 |
CN112540834A (zh) * | 2020-12-18 | 2021-03-23 | 郑州阿帕斯数云信息科技有限公司 | 一种分布式事务中的缓存处理方法、装置及其设备 |
CN112506961A (zh) * | 2020-12-28 | 2021-03-16 | 浪潮云信息技术股份公司 | 一种提高数据查询效率的方法 |
CN113282621A (zh) * | 2021-04-23 | 2021-08-20 | 北京皮尔布莱尼软件有限公司 | 一种缓存数据的处理方法及计算设备 |
CN113722363A (zh) * | 2021-08-19 | 2021-11-30 | 成都民航西南凯亚有限责任公司 | 缓存公共组件及其实现、安装与运行方法 |
CN113722363B (zh) * | 2021-08-19 | 2023-09-12 | 成都民航西南凯亚有限责任公司 | 缓存公共组件及其实现、安装与运行方法 |
CN115408371B (zh) * | 2022-10-31 | 2023-01-31 | 之江实验室 | 一种redis数据库动态冗余部署方法和装置 |
CN115408371A (zh) * | 2022-10-31 | 2022-11-29 | 之江实验室 | 一种redis数据库动态冗余部署方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111596922A (zh) | 基于redis实现自定义缓存注解的方法 | |
US11647097B2 (en) | Providing access to managed content | |
CN107402963B (zh) | 搜索数据的构建方法、增量数据的推送方法及装置和设备 | |
CN103620549B (zh) | 用于统一数据存储的存储介质抽象 | |
CN107391758B (zh) | 数据库切换方法、装置及设备 | |
CN113254466B (zh) | 一种数据处理方法、装置、电子设备和存储介质 | |
US11500783B1 (en) | Evicting data associated with a data intake and query system from a local storage | |
CN105700819B (zh) | 用于网络数据存储的方法和系统 | |
JP2006277726A (ja) | データベース・オブジェクトへのファイル・システム・モデルのマッピング | |
CN102930035A (zh) | 从多个不同的内容源导出内容项 | |
US20210350303A1 (en) | Task list for tasks created at a third-party source | |
US8533258B2 (en) | Bidirectional synchronization with CRM applications | |
CN109767274B (zh) | 一种对海量发票数据进行关联存储的方法及系统 | |
CN111930768B (zh) | 增量数据获取方法、发送方法、装置及其计算机存储介质 | |
CN104461826A (zh) | 对象流转监控的方法、装置及系统 | |
CN107408239B (zh) | 通过多个邮箱在通信应用中进行海量数据管理的架构 | |
US20190057028A1 (en) | Conflict Resolution and Garbage Collection in Distributed Databases | |
CN112464044B (zh) | 一种文件数据块变化信息监控管理系统及其方法 | |
US8805942B2 (en) | Storing and partitioning email messaging data | |
CN110442645A (zh) | 数据索引方法及装置 | |
CN111753141A (zh) | 一种数据管理方法及相关设备 | |
EP2819028A2 (en) | Content management system | |
CN113761053A (zh) | 一种数据查询方法、装置、电子设备及存储介质 | |
US10037155B2 (en) | Preventing write amplification during frequent data updates | |
CN101364224A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200828 |