zoukankan      html  css  js  c++  java
  • 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();
      }
    }
    
    
  • 相关阅读:
    为什么软件开发的速率比不上硬件的发展
    快速通读教材《现代软件工程——构建之法》
    个人学期总结
    201571030123/201571030126《小学四则运算练习软件软件需求说明》结对项目报告
    《小学四则运算练习软件》GUI
    java编写四则运算
    201571030126 初读《构建之法》
    201571030121《小学四则运算练习软件软件需求说明》结对项目报告
    201571030121 《小学生四则运算练习软件》结对项目
    201571030121 《四则运算》
  • 原文地址:https://www.cnblogs.com/lori/p/9518892.html
Copyright © 2011-2022 走看看