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();
  }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM