缓存来了

在dotnet平台有自己的缓存框架,在java springboot里当然了集成了很多,而且缓存的中间件也可以进行多种选择,向redis, hazelcast
都是分布式的缓存中间件,今天主要说一下后者的实现。

添加依赖包
dependencies { compile("org.springframework.boot:spring-boot-starter-cache")
compile("com.hazelcast:hazelcast:3.7.4")
compile("com.hazelcast:hazelcast-spring:3.7.4") } bootRun { systemProperty
"spring.profiles.active", "hazelcast-cache" }
config统一配置
@Configuration @Profile("hazelcast-cache")//运行环境名称 public class
HazelcastCacheConfig { @Bean public Config hazelCastConfig() { Config config =
new Config(); config.setInstanceName("hazelcast-cache"); MapConfig
allUsersCache = new MapConfig(); allUsersCache.setTimeToLiveSeconds(3600);
allUsersCache.setEvictionPolicy(EvictionPolicy.LFU);
config.getMapConfigs().put("alluserscache", allUsersCache); MapConfig usercache
= new MapConfig(); usercache.setTimeToLiveSeconds(3600);//超时时间为1小时
usercache.setEvictionPolicy(EvictionPolicy.LFU);
config.getMapConfigs().put("usercache", usercache);//usercache为缓存的cachename
return config; } }
添加仓储
public interface UserRepository { List<UserInfo> fetchAllUsers();
List<UserInfo> fetchAllUsers(String name); } @Repository
@Profile("hazelcast-cache")//
指定在这个hazelcast-cache环境下,UserRepository的实例才是UserInfoRepositoryHazelcast public
class UserInfoRepositoryHazelcast implements UserRepository { @Override
@Cacheable(cacheNames = "usercache", key = "#root.methodName")// 无参的方法,方法名作为key
public List<UserInfo> fetchAllUsers(){ List<UserInfo> list = new ArrayList<>();
list.add(UserInfo.builder().phone("135").userName("zzl1").createAt(LocalDateTime.now()).build());
list.add(UserInfo.builder().phone("136").userName("zzl2").createAt(LocalDateTime.now()).build());
return list; } @Override @Cacheable(cacheNames = "usercache", key = "{#name}")
// 方法名和参数组合做为key public List<UserInfo> fetchAllUsers(String name) {
List<UserInfo> list = new ArrayList<>();
list.add(UserInfo.builder().phone("135").userName("zzl1").createAt(LocalDateTime.now()).build());
list.add(UserInfo.builder().phone("136").userName("zzl2").createAt(LocalDateTime.now()).build());
return list; } }
配置profile

application.yml开启这个缓存的环境
profiles.active: hazelcast-cache
运行程序

可以在单元测试里进行测试,调用多次,方法体只进入一次,这就是缓存成功了。
@ActiveProfiles("hazelcast-cache") public class UserControllerTest extends
BaseControllerTest { @Test public void fetchUsers() { getOk(); //test caching
getOk(); } private WebTestClient.ResponseSpec getOk() { return http.get()
.uri("/users/all/zzl") .exchange() .expectStatus().isOk(); } }