JETCACHE如何实现缓存的缓存、更新、删除操作
缓存工具的对比快速接入1.加依赖2.加配置3.增加config配置类JetCacheConfiguration4.加注解
入坑提示代码参考
缓存工具的对比
工具名称功能对比备注
Spring CacheSpring官方提供,使用简单,功能单一,不能使用缓存刷新、二级缓存对需求不高者可以使用JetCache阿里出品,原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作。对缓存要求高的用户推荐使用
快速接入
1.加依赖
<dependency>
<groupId>com
.alicp
.jetcache
</groupId
>
<artifactId>jetcache
-starter
-redis
-lettuce
</artifactId
>
<version>2.6.0</version
>
</dependency
>
2.加配置
在bootstrap.yml里增加如下配置
jetcache:
statIntervalMinutes: 15
areaInCacheName: false
local:
default:
type: linkedhashmap
keyConvertor: fastjson
remote:
default:
type: redis.lettuce
keyConvertor: fastjson
uri: redis
://127.0.0.1
:6379/
3.增加config配置类JetCacheConfiguration
package vip
.mate
.core
.jetcache
.config
;
import com
.alicp
.jetcache
.anno
.CacheConsts
;
import com
.alicp
.jetcache
.anno
.config
.EnableCreateCacheAnnotation
;
import com
.alicp
.jetcache
.anno
.config
.EnableMethodCache
;
import com
.alicp
.jetcache
.anno
.support
.GlobalCacheConfig
;
import com
.alicp
.jetcache
.anno
.support
.SpringConfigProvider
;
import com
.alicp
.jetcache
.embedded
.EmbeddedCacheBuilder
;
import com
.alicp
.jetcache
.embedded
.LinkedHashMapCacheBuilder
;
import com
.alicp
.jetcache
.redis
.lettuce
.RedisLettuceCacheBuilder
;
import com
.alicp
.jetcache
.support
.FastjsonKeyConvertor
;
import com
.alicp
.jetcache
.support
.JavaValueDecoder
;
import com
.alicp
.jetcache
.support
.JavaValueEncoder
;
import io
.lettuce
.core
.ClientOptions
;
import io
.lettuce
.core
.RedisClient
;
import org
.springframework
.context
.annotation
.Bean
;
import org
.springframework
.context
.annotation
.Configuration
;
import org
.springframework
.context
.annotation
.PropertySource
;
import vip
.mate
.core
.common
.factory
.YamlPropertySourceFactory
;
import java
.util
.HashMap
;
import java
.util
.Map
;
@Configuration
@EnableMethodCache(basePackages
= "vip.mate.system")
@EnableCreateCacheAnnotation
@PropertySource(factory
= YamlPropertySourceFactory
.class, value
= "classpath:mate-jetcache.yml")
public class JetCacheConfiguration {
@Bean
public RedisClient
redisClient(){
RedisClient client
= RedisClient
.create("redis://127.0.0.1");
client
.setOptions(ClientOptions
.builder().
disconnectedBehavior(ClientOptions
.DisconnectedBehavior
.REJECT_COMMANDS
)
.build());
return client
;
}
@Bean
public SpringConfigProvider
springConfigProvider() {
return new SpringConfigProvider();
}
@Bean
public GlobalCacheConfig
config(SpringConfigProvider configProvider
, RedisClient redisClient
){
Map localBuilders
= new HashMap();
EmbeddedCacheBuilder localBuilder
= LinkedHashMapCacheBuilder
.createLinkedHashMapCacheBuilder()
.keyConvertor(FastjsonKeyConvertor
.INSTANCE
);
localBuilders
.put(CacheConsts
.DEFAULT_AREA
, localBuilder
);
Map remoteBuilders
= new HashMap();
RedisLettuceCacheBuilder remoteCacheBuilder
= RedisLettuceCacheBuilder
.createRedisLettuceCacheBuilder()
.keyConvertor(FastjsonKeyConvertor
.INSTANCE
)
.valueEncoder(JavaValueEncoder
.INSTANCE
)
.valueDecoder(JavaValueDecoder
.INSTANCE
)
.redisClient(redisClient
);
remoteBuilders
.put(CacheConsts
.DEFAULT_AREA
, remoteCacheBuilder
);
GlobalCacheConfig globalCacheConfig
= new GlobalCacheConfig();
globalCacheConfig
.setLocalCacheBuilders(localBuilders
);
globalCacheConfig
.setRemoteCacheBuilders(remoteBuilders
);
globalCacheConfig
.setStatIntervalMinutes(15);
globalCacheConfig
.setAreaInCacheName(false);
return globalCacheConfig
;
}
}
4.加注解
以下需要Spring或者SpringBoot环境
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注解可以为一个方法添加缓存,@CacheUpdate用于更新缓存,@CacheInvalidate用于移除缓存元素。
入坑提示
采用最新的2.6.0版本,有一个问题,就是采用jedis的方式的时候,提示一些报错信息,暂时调整为lettuce
代码参考
微服务源码,集成了JetCache 如果觉得不错,可以帮我点赞加关注,也可以进QQ群交流心得。