AutoLoadCache 使用以及规范

本贴最后更新于 1624 天前,其中的信息可能已经时移世易

简介

AutoLoadCache 是基于 AOP+Annotation 等技术实现的高效的缓存管理解决方案,实现缓存与业务逻辑的解耦,并增加异步刷新及“拿来主义机制”,以适应高并发环境下的使用。

使用 AOP + Annotation 来解决这个问题,同时使用自动加载机制 来实现数据“常驻内存”

---> 跳转官方 git

如何使用

本文的自动缓存使用的 redis 作为缓存技术, 请确保自己系统中的 redis 能够正常使用

引入 jar 包


<!-- autoload-cache 依赖 -->

<dependency>

<groupId>com.github.qiujiayu</groupId>

<artifactId>autoload-cache-spring-boot-starter</artifactId>

<version>7.0.8</version>

</dependency>

<!-- aop 依赖 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

配置类


package  com.xxx

  

import com.jarvis.cache.ICacheManager;

import com.jarvis.cache.autoconfigure.AutoloadCacheProperties;

import com.jarvis.cache.clone.ICloner;

import com.jarvis.cache.map.MapCacheManager;

import com.jarvis.cache.serializer.FastjsonSerializer;

import com.jarvis.cache.serializer.ISerializer;

import org.springframework.context.annotation.Bean;

  

/**

* @Author: WanG

* @Date: 2020/6/9 10:32

* @version: v1.0

* @description: 自动缓存框架配置

*/

public  class  AutoloadCacheConfiguration {

// @Bean

public  ICacheManager  mapCacheManager(AutoloadCacheProperties  config, ICloner  cloner) {

return  new  MapCacheManager(config.getConfig(), cloner);

}

  

@Bean

public  ISerializer<Object> autoloadCacheSerializer() {

return  new  FastjsonSerializer();

}

}

注解

Annotation: 官方例子

参数说明

  • #retVal 数组类型统一用这个取值, 或者用为取返回值

  • #args 按坐标取传入参数

  • #hash 使用 hash函数

  • #empty 使用 empty 判断

  • expireExpression 过期时间表达式

  • condition 执行条件, 满足改条件才生效(用于修改和删除数据的时候连带删除缓存)

  • @ExCache 额外生成关联缓存

  • @CacheDelete 删除缓存注解

  • @CacheDeleteKey 生成删除缓存 Key 注解

  • @CacheDeleteTransactional 事务环境中批量删除缓存注解

  • @LocalCache 本地缓存注解

缓存数据

在需要进行数据缓存的地方加上 @Cache 注解即可


@Cache(expire  =  "{过期时间(这个是数字类型)}", key  =  "{缓存使用的key}")

清理缓存

在需要清理缓存的地方加上 @CacheDelete 注解


@CacheDelete({ @CacheDeleteKey(value  =  "{缓存使用的key}") })

动态过期时间

当返回值为空时缓存有效期为 20 分钟, 当返回值不为空有效期为 60 分钟


@Cache(expire  = EXPIRE_TIME, key  = CACHE_KEY_INITUSERINFO, expireExpression  =  "null == #retVal ? 20: 60")

动态

当删除语句执行成功, 才将对应 key 的缓存删除


@CacheDelete({ @CacheDeleteKey(value  =  "'user-byid-' + #args[0]", condition  =  "#retVal > 0") })

int  deleteUserById(Long id);

动态取值

注解里面可以用 #args[i] 来动态获取入参


@Cache(expire  =  60, expireExpression  =  "null == #retVal ? 30: 60", key  =  "'user-byid-' + #args[0]")

UserDO  getUserById(Long id);

使用规范

  1. 缓存 key: 作为分隔符

  2. 缓存纯数据库字段 key 要加上 table 关键字

  3. 缓存方法数据 key 要加上 method 关键字

  4. 对数据进行 修改 或者 删除 时务必同步将缓存删除(带上 condition, 操作成功才动缓存)

  5. 方法缓存 key 中带上类名和方法名(用 . 隔开)

  6. key 中带上缓存的入参, 并用 = 连接参数名和参数值

  7. 多个入参用 , 分隔

举例


## 缓存key值:

user-server:method:+CacheServiceImpl.initUserInfo:personId=1,homeId=1

  

## 代码样例

public  static  final  String CACHE_KEY_INITUSERINFO = CacheConfig.KEY_METHOD +  "CacheServiceImpl.initUserInfo:personId='+#args[0]+',homeId='+#args[1]";

```~~~~
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • 框架
    47 引用 • 348 回帖 • 1 关注
  • 缓存
    42 引用 • 70 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...