• 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();
      }
    }
    
    
  • 相关阅读:
    python string
    python md5使用例子
    Linux 与 Win32 部分API对照表
    使用Doxygen生成libevent document
    CRC32校验算法以及余式表生成
    SQLServer中查询时显示行号的方法
    C#上传文件图片怎么判断格式
    登录注册 分页存储过程及系统存储过程
    SQL Server 批量插入数据的两种方法
    sqlserver得到行号
  • 原文地址:https://www.cnblogs.com/lori/p/9518892.html
Copyright © 2020-2023  润新知