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

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

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

1 . pom.xml添加相關(guān)依賴

<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相關(guān) -->
    <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 . 自定義二級(jí)緩存類

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() {
    // 關(guān)鍵代碼,data更新時(shí)清理緩存
    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;
  }

}

使用一個(gè)Transfer類間接注入RedisConnectionFactory

@Component 
public class RedisCacheTransfer {

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

4 . 在application.propreties中開啟二級(jí)緩存

開啟mybatis的二級(jí)緩存

spring.datasource.cachePrepStmts=true

5 . 基于注解的使用

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    Java之定時(shí)器Timer和定時(shí)任務(wù)TimerTask應(yīng)用以及原理解讀

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

    Spring源碼分析容器啟動(dòng)流程

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

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

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

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

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

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

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

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

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

    SpringBoot返回對(duì)象時(shí),如何將Long類型轉(zhuǎn)換為String

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

    Java 關(guān)系運(yùn)算符詳情及案例(上)

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

    SpringBoot實(shí)現(xiàn)評(píng)論回復(fù)功能(數(shù)據(jù)庫(kù)設(shè)計(jì))

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

最新評(píng)論

威远县| 上高县| 且末县| 兴海县| 唐海县| 临泽县| 伊宁市| 望江县| 武穴市| 万年县| 峨山| 晋宁县| 乌兰县| 武宁县| 白城市| 沐川县| 叙永县| 平顶山市| 甘洛县| 大荔县| 尼勒克县| 南乐县| 儋州市| 晴隆县| 察隅县| 施甸县| 江孜县| 略阳县| 民县| 夏津县| 桦川县| 南丰县| 桃园市| 西乌| 涞水县| 格尔木市| 博白县| 固始县| 榆树市| 靖江市| 潞城市|