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();
      }
    }
    
    
  • 相关阅读:
    ubuntu下怎么配置/查看串口-minicom工具
    jpg与pgm(P5)的互相转换(Python)
    hyper-v安装ubuntu18的全过程+踩过的坑(win10家庭版)
    zerotier的下载、安装、配置与使用(win10、ubuntu)
    github page+jekyll构建博客的解决方案
    opencv2.4.13.7的resize函数使用(c++)
    c++中的const和volatile知识自我总结
    各种优化算法详解
    P与NP问题
    vs2017配置pthread.h的方法
  • 原文地址:https://www.cnblogs.com/lori/p/9518892.html
Copyright © 2011-2022 走看看