Spring Boot 整合JetCache缓存框架实现本地caffeine远程redis存储
JetCache主要通过@Cached和@CreateCache实现缓存,@Cached是在接口方法或者类方法上添加缓存,一般以参数为key,以返回值为value存入缓存中。@CreateCache是直接创建一个缓存实例,然后调用put(T
key, T value)、get(T key)等方法实现缓存。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis</artifactId>
<version>2.6.0</version>
</dependency>
配置信息
jetcache:
statIntervalMinutes: 15
areaInCacheName: false # 是否加入缓存key前缀
local:
default:
type: linkedhashmap # 缓存类型。tair、redis为当前支持的远程缓存;linkedhashmap、caffeine为当前支持的本地缓存类型
keyConvertor: fastjson # Key的转换器
remote:
default:
type: redis
keyConvertor: fastjson
valueEncoder: java
valueDecoder: java
poolConfig:
minIdle: 5
maxIdle: 20
maxTotal: 50
host: 127.0.0.1
port: 6379
database: 4
# remote 表示远程缓存
# local表示本地缓存
Servicec层
第一种方法通过@CreateCache
@Service
public class UserServiceImpl implements UserService {
@CreateCache(name = "cacheName",expire = 100,timeUnit = TimeUnit.SECONDS)
private Cache<String, User> userCache;
@CreateCache(name = "ColorMap",expire = 500,timeUnit = TimeUnit.SECONDS)
private Cache<String, Object> mapCache;
@Override
public User createUser() {
userCache.PUT("valueName::keyName2", new User("id1", "张三", "深圳", "1234567", 18));
CacheGetResult<User> get = userCache.GET("valueName::keyName2");
User value = get.getValue();
return value;
}
@Override
public User findUser() {
CacheGetResult<User> userCacheGetResult = userCache.GET("valuename1::keyname1");
User value = userCacheGetResult.getValue();
return value;
}
@Override
public String createString() {
mapCache.PUT("StringCache","李四");
return (String) mapCache.get("StringCache");
}
}
User实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class User implements Serializable {
private String userId;
private String name;
private String address;
private String tel;
private Integer age;
}
启动类要加上启动注解
//JetCache主要通过@Cached和@CreateCache实现缓存,
//@Cached是在接口方法或者类方法上添加缓存,一般以参数为key,以返回值为value存入缓存中。
//@CreateCache是直接创建一个缓存实例,然后调用put(T key, T value)、get(T key)等方法实现缓存。
//@EnableCreateCacheAnnotation注解用于开启jetcache中@CreateCache注解,
//@EnableMethodCache(basePackages = “com.example.jetcache”)注解用于开启@cache注解
@SpringBootApplication
@EnableCreateCacheAnnotation
@EnableMethodCache(basePackages = "com.example.jetcache")
public class JetcacheApplication {
public static void main(String[] args) {
SpringApplication.run(JetcacheApplication.class, args);
}
}
方法二:创建方法缓存
使用@Cached方法可以为一个方法添加上缓存,@CacheUpdate用于更新缓存,@CacheInvalidate用于移除缓存元素。JetCache通过Spring AOP生成代理,来支持缓存功能。注解可以加在接口方法上也可以加在类方法上,但需要保证是个Spring bean。
@Cached:系统调用该接口方法时检测到@Cached标签,首先会根据key去调用get方法获取value值,如果存在value值则直接将值返回,如果不存在key,则会执行代码查询结果,并自动调用get方法将返回值存入缓存中。
public interface UserService {
@Cached(name="userCache.", key="#userId", expire = 3600)
User getUserById(long userId);
@CacheUpdate(name="userCache.", key="#user.userId", value="#user")
void updateUser(User user);
@CacheInvalidate(name="userCache.", key="#userId")
void deleteUser(long userId);
}
@Cached属性
@CacheInvalidate注解说明:
@CacheUpdate注解说明:
@CacheRefresh注解说明: