springboot hazelcast缓存中间件的实例代码

 更新时间:2018年08月23日 11:38:27   作者:张占岭  
这篇文章主要介绍了springboot hazelcast缓存中间件的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

缓存来了

在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();
 }
}

总结

以上所述是小编给大家介绍的springboot hazelcast缓存中间件的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:

相关文章

  • Java利用AlphaComposite类合并图像

    Java利用AlphaComposite类合并图像

    这篇文章主要介绍了Java利用AlphaComposite类合并图像,帮助大家更好的利用Java处理图像,感兴趣的朋友可以了解下
    2020-10-10
  • Springboot项目因为kackson版本问题启动报错解决方案

    Springboot项目因为kackson版本问题启动报错解决方案

    这篇文章主要介绍了Springboot项目因为kackson版本问题启动报错解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 使用Pinyin4j进行拼音分词的方法

    使用Pinyin4j进行拼音分词的方法

    下面小编就为大家分享一篇使用Pinyin4j进行拼音分词的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • 彻底搞懂Java多线程(三)

    彻底搞懂Java多线程(三)

    这篇文章主要给大家介绍了关于Java面试题之多线程和高并发的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-07-07
  • Java中CAS机制实现方法详解

    Java中CAS机制实现方法详解

    传统的并发控制手段如synchronized和ReentrantLock虽有效防止资源竞争,却可能引起性能开销,相比之下,CAS(CompareAndSwap)提供一种轻量级的乐观锁策略,通过硬件级别的原子指令实现无锁并发,提高性能,需要的朋友可以参考下
    2024-09-09
  • spring中的特殊注解@RequiredArgsConstructor详解

    spring中的特殊注解@RequiredArgsConstructor详解

    这篇文章主要介绍了spring中的特殊注解@RequiredArgsConstructor,包括注解注入,构造器注入及setter注入,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • spring4新特性之web开发增强

    spring4新特性之web开发增强

    这篇文章主要介绍了spring4新特性之web开发增强的相关资料,需要的朋友可以参考下
    2017-09-09
  • Java Swing实现扫雷源码

    Java Swing实现扫雷源码

    这篇文章主要为大家详细介绍了Java Swing实现扫雷源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Java中的ReentrantLock使用解析

    Java中的ReentrantLock使用解析

    这篇文章主要介绍了Java中的ReentrantLock使用解析,ReentrandLock即可重入锁,可重入锁解决的是重入锁定的问题,重入锁定指的是当一个线程执行逻辑时,需要两次获取锁,而该锁不可重入就会导致内部嵌套无法获取锁导致Reentrance Lockout发生,需要的朋友可以参考下
    2023-11-11
  • 浅谈Java中格式化输出

    浅谈Java中格式化输出

    这篇文章主要介绍了Java中格式化输出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论