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();
      }
    }
    
    
  • 相关阅读:
    gridview自增序号
    web.config文件详解
    [Spring-AOP-XML] 看完了解Spirng中的AOP和XML进行事务管理
    [Spring] 快速介绍Spirng中AOP事务的传播属性和事务隔离级别
    [ log4j ]-日志文件的使用
    [AOP] 最简单的AOP概念理解
    [Spring] 一个例子了解Spring如何实例化Bean
    [Spring] 一篇文章了解Spring是什么
    JavaServlet的文件上传和下载
    解决:npm install ERR! Unexpected end of JSON input
  • 原文地址:https://www.cnblogs.com/lori/p/9518892.html
Copyright © 2011-2022 走看看