最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Spring boot使用Redis集群替換mybatis二級緩存

 更新時間:2017年05月31日 09:56:08   作者:White魚  
本篇文章主要介紹了詳解Spring boot使用Redis集群替換mybatis二級緩存,具有一定的參考價值,感興趣的小伙伴們可以參考一下

1 . pom.xml添加相關依賴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.1.RELEASE</version>
</parent>

  <!-- 依賴 -->
  <dependencies>
    <!-- mybatis -->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.2.0</version>
    </dependency>
    <!-- redis相關 -->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-redis</artifactId>
    </dependency>
  <dependencies>

2 . 配置Redis集群,參考spring-data-redis官方文檔

@Component
@ConfigurationProperties(prefix = "spring.redis.cluster")
public class ClusterConfigurationProperties {

  /*
   * spring.redis.cluster.nodes[0] = 127.0.0.1:7379
   * spring.redis.cluster.nodes[1] = 127.0.0.1:7380
   * ...
   */
  List<String> nodes;

  /**
   * Get initial collection of known cluster nodes in format {@code host:port}.
   *
   * @return
   */
  public List<String> getNodes() {
    return nodes;
  }

  public void setNodes(List<String> nodes) {
    this.nodes = nodes;
  }
}

@Configuration
public class AppConfig {

  /**
   * Type safe representation of application.properties
   */
  @Autowired ClusterConfigurationProperties clusterProperties;

  public @Bean RedisConnectionFactory connectionFactory() {

    return new JedisConnectionFactory(
      new RedisClusterConfiguration(clusterProperties.getNodes()));
  }
}

3 . 自定義二級緩存類

public class RedisCache implements Cache {

  private static final String PREFIX = "SYS_CONFIG:";

  private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true);

  private String id;
  private JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer();

  private static RedisConnectionFactory redisConnectionFactory;

  public RedisCache(final String id) {
    if (id == null) {
      throw new IllegalArgumentException("Cache instances require an ID");
    }
    this.id = id;
  }

  @Override
  public String getId() {
    return this.id;
  }

  @Override
  public void putObject(Object key, Object value) {
    RedisClusterConnection conn = redisConnectionFactory
        .getClusterConnection();
    if (key == null)
      return;
    String strKey = PREFIX + key.toString();
    conn.set(strKey.getBytes(), jdkSerializer.serialize(value));
    conn.close();
  }

  @Override
  public Object getObject(Object key) {
    if (key != null) {
      String strKey = PREFIX + key.toString();
      RedisClusterConnection conn = redisConnectionFactory
          .getClusterConnection();
      byte[] bs = conn.get(strKey.getBytes());
      conn.close();
      return jdkSerializer.deserialize(bs);
    }
    return null;
  }

  @Override
  public Object removeObject(Object key) {
    if (key != null) {
      RedisClusterConnection conn = redisConnectionFactory
          .getClusterConnection();
      conn.del(key.toString().getBytes());
      conn.close();
    }
    return null;
  }

  @Override
  public void clear() {
    // 關鍵代碼,data更新時清理緩存
    RedisClusterConnection conn = redisConnectionFactory
        .getClusterConnection();
    Set<byte[]> keys = conn.keys((PREFIX+"*").getBytes());
    for (byte[] bs : keys) {
      conn.del(bs);
    }
    conn.close();
  }
  @Override
  public int getSize() {
    // TODO Auto-generated method stub
    return 0;
  }

  @Override
  public ReadWriteLock getReadWriteLock() {
    return this.readWriteLock;
  }


  public static void setRedisConnectionFactory(RedisConnectionFactory redisConnectionFactory) {
    RedisCache.redisConnectionFactory = redisConnectionFactory;
  }

}

使用一個Transfer類間接注入RedisConnectionFactory

@Component 
public class RedisCacheTransfer {

@Autowired
public void setJedisConnectionFactory(
    RedisConnectionFactory jedisConnectionFactory) {
  RedisCache.setRedisConnectionFactory(jedisConnectionFactory);
}
}

4 . 在application.propreties中開啟二級緩存

開啟mybatis的二級緩存

spring.datasource.cachePrepStmts=true

5 . 基于注解的使用

@CacheNamespace(implementation = RedisCache.class)
public interface ConfigDaoMapper {
  .....
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • springBoot動態(tài)加載jar及如何將類注冊到IOC

    springBoot動態(tài)加載jar及如何將類注冊到IOC

    在SpringBoot項目中動態(tài)加載jar文件并將其類注冊到IOC容器是一種高級應用方式,,這種方法為SpringBoot項目提供了更靈活的擴展能力,使得項目可以在不修改原有代碼的基礎上增加新的功能模塊,感興趣的朋友一起看看吧
    2024-11-11
  • Java之定時器Timer和定時任務TimerTask應用以及原理解讀

    Java之定時器Timer和定時任務TimerTask應用以及原理解讀

    文章介紹了Java JDK自帶的定時器Timer和定時任務TimerTask的使用和原理,Timer和TimerTask成對出現(xiàn),Timer是定時器,TimerTask是定時任務,TimerTask實現(xiàn)Runnable接口的run方法,Timer的屬性TimerThreadthread繼承Thread
    2024-12-12
  • Spring源碼分析容器啟動流程

    Spring源碼分析容器啟動流程

    Spring的啟動流程可以歸納為三個步驟:初始化Spring容器,注冊內置的BeanPostProcessor的BeanDefinition到容器中、將配置類的BeanDefinition注冊到容器中、調用refresh()方法刷新容器
    2022-09-09
  • Java圓通物流軌跡推送服務接口文檔及流程

    Java圓通物流軌跡推送服務接口文檔及流程

    這篇文章主要介紹了圓通物流軌跡推送服務接口Java文檔,主要用來接收圓通推送的訂單狀態(tài),本文給大家分享詳細流程,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • SpringBoot+Vue實現(xiàn)動態(tài)菜單的思路梳理

    SpringBoot+Vue實現(xiàn)動態(tài)菜單的思路梳理

    這篇文章主要為大家詳細介紹了利用SpringBoot+Vue實現(xiàn)動態(tài)菜單的思路梳理,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2022-07-07
  • 在java代碼中獲取JVM參數(shù)的方法

    在java代碼中獲取JVM參數(shù)的方法

    下面小編就為大家?guī)硪黄趈ava代碼中獲取JVM參數(shù)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Spring Security 實現(xiàn)“記住我”功能及原理解析

    Spring Security 實現(xiàn)“記住我”功能及原理解析

    這篇文章主要介紹了Spring Security 實現(xiàn)“記住我”功能及原理解析,需要的朋友可以參考下
    2020-05-05
  • SpringBoot返回對象時,如何將Long類型轉換為String

    SpringBoot返回對象時,如何將Long類型轉換為String

    這篇文章主要介紹了SpringBoot返回對象時,實現(xiàn)將Long類型轉換為String,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java 關系運算符詳情及案例(上)

    Java 關系運算符詳情及案例(上)

    這篇文章主要介紹了Java 關系運算符詳情及案例實現(xiàn),Java 也提供了許多類型的運算符,可以根據需要使用它們來執(zhí)行各種計算和函數(shù),包括邏輯、算術、關系等。它們根據它們提供的功能進行分類,下面將詳細介紹該內容,需要的朋友可以參考一下
    2021-12-12
  • SpringBoot實現(xiàn)評論回復功能(數(shù)據庫設計)

    SpringBoot實現(xiàn)評論回復功能(數(shù)據庫設計)

    這篇文章主要介紹了SpringBoot實現(xiàn)評論回復功能(數(shù)據庫設計),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論

始兴县| 区。| 黔西县| 湟源县| 全椒县| 山丹县| 宣武区| 于田县| 集贤县| 炎陵县| 三门峡市| 南和县| 塔河县| 略阳县| 邳州市| 葵青区| 万宁市| 菏泽市| 平武县| 遂昌县| 喀什市| 朝阳县| 扎鲁特旗| 蓬莱市| 盖州市| 开远市| 麦盖提县| 惠州市| 安达市| 双辽市| 抚顺县| 秦皇岛市| 万载县| 乌海市| 衡水市| 宜阳县| 孝感市| 庆云县| 平顺县| 咸阳市| 芒康县|