AutoLoadCache 是基于AOP+Annotation等技术实现的高效的缓存管理解决方案,实现缓存与业务逻辑的解耦,并增加异步刷新及“拿来主义机制”,以适应高并发环境下的使用。
使用AOP + Annotation 来解决这个问题,同时使用自动加载机制 来实现数据“常驻内存”—> 跳转官方git
本文的自动缓存使用的
redis
作为缓存技术, 请确保自己系统中的redis
能够正常使用
<!-- 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: 官方例子
hash函数
empty
判断在需要进行数据缓存的地方加上@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);
key
用:
作为分隔符key
要加上table
关键字key
要加上method
关键字修改
或者删除
时务必同步将缓存删除(带上condition
, 操作成功才动缓存)key
中带上类名和方法名(用.
隔开)key
中带上缓存的入参, 并用=
连接参数名和参数值,
分隔## 缓存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]";