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();
      }
    }
    
    
  • 相关阅读:
    [转]ExtJS之遍历Store
    [转]Ext ComboBox 默认选中某一项
    [转]extjs render 用法介绍
    [转]Extjs combo数据绑定与获取
    [转]ExtJs:xtype的含义
    java 使用POI批量导入excel数据
    面临读研,找工作杂感
    二维“有序”数组查找问题的解决
    操作系统——进程调度之短进程优先
    阶乘相关问题
  • 原文地址:https://www.cnblogs.com/lori/p/9518892.html
Copyright © 2011-2022 走看看