缓存来了
在dotnet平台有自己的缓存框架,在java springboot里当然了集成了很多,而且缓存的中间件也可以进行多种选择,向redis, hazelcast都是分布式的缓存中间件,今天主要说一下后者的实现。
添加依赖包
dependencies {
compile(\"org.spring work.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 ControllerTest {
@Test
public void fetchUsers() {
getOk();
//test caching
getOk();
}
private WebTestClient.ResponseSpec getOk() {
return http.get()
.uri(\"/users/all/zzl\")
.exchange()
.expectStatus().isOk();
}
}
继续阅读与本文标签相同的文章
上一篇 :
用BERT构建最先进语言模型
下一篇 :
暴力破解增加 token 验证的表单请求
-
RDS for SQL Serve如何使用OSS备份文件增量上云?
2026-05-18栏目: 教程
-
企业级业务架构的设计难点
2026-05-18栏目: 教程
-
玩数据必备Python库:Numpy使用详解
2026-05-18栏目: 教程
-
商业银行业务架构设计
2026-05-18栏目: 教程
-
企业级业务架构设计方法与“中台”概念的比较
2026-05-18栏目: 教程
