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

詳解Spring極速集成注解redis實(shí)錄

 更新時(shí)間:2017年07月06日 08:29:25   作者:Orson  
這篇文章主要介紹了詳解Spring極速集成注解redis實(shí)錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Redis 做為基于內(nèi)存的 Key-Value 數(shù)據(jù)庫(kù),用來(lái)做緩存服務(wù)器性?xún)r(jià)比相當(dāng)高。

官方推出的面向 Java 的 Client Jedis,提供了很多接口和方法,可以讓 Java 操作使用 Redis。

Spring Data Redis 為 Spring 團(tuán)隊(duì)對(duì) Jedis 進(jìn)行了封裝,集成 Jedis 的一些命令和方法。

本文重點(diǎn)描述集成過(guò)程,能讓你迅速的通過(guò) spring-data-redis 將 redis 集成到 spring 項(xiàng)目中,畢竟大家都忙的。

1. 添加項(xiàng)目依賴(lài)

    <!--redis 緩存-->
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-redis</artifactId>
      <version>1.8.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>

2. 添加 spring-redis-context 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
  <description>redis 相關(guān)類(lèi) Spring 托管</description>

  <!--載入 redis 配置文件-->
  <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>

  <!-- 配置 JedisPoolConfig 實(shí)例 -->
  <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxIdle" value="${redis.maxIdle}"/>
    <property name="maxTotal" value="${redis.maxActive}"/>
    <property name="maxWaitMillis" value="${redis.maxWait}"/>
    <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
  </bean>

  <!-- 配置JedisConnectionFactory -->
  <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="${redis.host}"/>
    <property name="port" value="${redis.port}"/>
    <property name="password" value="${redis.pass}"/>
    <property name="database" value="${redis.dbIndex}"/>
    <property name="poolConfig" ref="poolConfig"/>
  </bean>

  <!-- 配置RedisTemplate -->
  <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <property name="connectionFactory" ref="jedisConnectionFactory"/>
  </bean>

  <!-- 配置RedisCacheManager -->
  <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
    <constructor-arg name="redisOperations" ref="redisTemplate"/>
    <property name="defaultExpiration" value="${redis.expiration}"/>
  </bean>

  <!-- 配置RedisCacheConfig -->
  <bean id="redisCacheConfig" class="com.rambo.sdh.common.util.RedisCacheConfig">
    <constructor-arg ref="jedisConnectionFactory"/>
    <constructor-arg ref="redisTemplate"/>
    <constructor-arg ref="redisCacheManager"/>
  </bean>
</beans>

JedisConnectionFactory 為 Jedis 連接工廠,配置由單獨(dú)抽象的 JedisPoolConfig 提供。

如果你熟悉 Spring 的 JdbcTemplate 對(duì)象的話(huà),這里大概能猜出來(lái) RedisTemplate 的作用,RedisTemplate 對(duì) RedisConnection 進(jìn)行了封裝。

提供連接管理,序列化等功能,它對(duì) Redis 的交互進(jìn)行了更高層次的抽象,極大的方便和簡(jiǎn)化了 Redis 的操作。

RedisCacheManager 做為 redis 統(tǒng)一的調(diào)度和管理者,有興趣可以反編譯源碼看看。

繼承自 org.springframework.cache.transaction.AbstractTransactionSupportingCacheManager 并實(shí)現(xiàn) org.springframework.cache.CacheManager。

3. 添加 redis.properties

#============================#
#==== Redis settings ====#
#============================#
#redis 服務(wù)器 IP
redis.host=127.0.0.1

#redis 服務(wù)器端口
redis.port=6379

#redis 密碼
redis.pass=redis#2017

#redis 支持16個(gè)數(shù)據(jù)庫(kù)(相當(dāng)于不同用戶(hù))可以使不同的應(yīng)用程序數(shù)據(jù)彼此分開(kāi)同時(shí)又存儲(chǔ)在相同的實(shí)例上
redis.dbIndex=0

#redis 緩存數(shù)據(jù)過(guò)期時(shí)間單位秒
redis.expiration=3000

#控制一個(gè) pool 最多有多少個(gè)狀態(tài)為 idle 的jedis實(shí)例
redis.maxIdle=300

#控制一個(gè) pool 可分配多少個(gè)jedis實(shí)例
redis.maxActive=600

#當(dāng)borrow一個(gè)jedis實(shí)例時(shí),最大的等待時(shí)間,如果超過(guò)等待時(shí)間,則直接拋出JedisConnectionException;
redis.maxWait=1000

#在borrow一個(gè)jedis實(shí)例時(shí),是否提前進(jìn)行alidate操作;如果為true,則得到的jedis實(shí)例均是可用的;
redis.testOnBorrow=true

當(dāng)然配置文件你也可以硬編碼到程序中,只是在參數(shù)發(fā)生改變的時(shí)候比較痛苦一點(diǎn)而已。

其中大部分配置項(xiàng)都是圍繞著 jedisPool ,如果你對(duì)數(shù)據(jù)庫(kù)連接池比較熟,你會(huì)發(fā)現(xiàn)它倆的配置項(xiàng)有點(diǎn)相似。

當(dāng)系統(tǒng) redis 遇到問(wèn)題出現(xiàn)故障時(shí),理解這里的選項(xiàng)是個(gè)不錯(cuò)的選擇。

4. 編寫(xiě)自定義 redis 配置類(lèi)

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
  protected final static Logger log = LoggerFactory.getLogger(RedisCacheConfig.class);

  private volatile JedisConnectionFactory mJedisConnectionFactory;
  private volatile RedisTemplate<String, String> mRedisTemplate;
  private volatile RedisCacheManager mRedisCacheManager;

  public RedisCacheConfig() {
    super();
  }

  public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate<String, String> mRedisTemplate, RedisCacheManager mRedisCacheManager) {
    super();
    this.mJedisConnectionFactory = mJedisConnectionFactory;
    this.mRedisTemplate = mRedisTemplate;
    this.mRedisCacheManager = mRedisCacheManager;
  }

  public JedisConnectionFactory redisConnectionFactory() {
    return mJedisConnectionFactory;
  }

  public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
    return mRedisTemplate;
  }

  public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
    return mRedisCacheManager;
  }

  @Bean
  public KeyGenerator keyGenerator() {
    return new KeyGenerator() {
      @Override
      public Object generate(Object o, Method method, Object... objects) {
        StringBuilder sb = new StringBuilder();
        sb.append(o.getClass().getName());
        sb.append(method.getName());
        for (Object obj : objects) {
          sb.append(obj.toString());
        }
        return sb.toString();
      }
    };
  }
}

該配置類(lèi)繼承自 org.springframework.cache.annotation.CachingConfigurerSupport 并實(shí)現(xiàn) org.springframework.cache.annotation.CachingConfigurer 的方法。

通俗一點(diǎn),該類(lèi)告訴 spring 當(dāng)前使用的緩存服務(wù)為 redis 并自定義了緩存 key 生成的規(guī)則。

5. 在你喜歡的地方進(jìn)行注解緩存

緩存一般使用在服務(wù)層,在你想緩存的方法上面添加相應(yīng)的注解即可,下面三個(gè)緩存的注解你得掌握。

@Cacheable  spring 會(huì)在其被調(diào)用后將返回值緩存起來(lái),以保證下次利用同樣的參數(shù)來(lái)執(zhí)行該方法時(shí)可以直接從緩存中獲取結(jié)果,而不需要再次執(zhí)行該方法。

@CachePut  標(biāo)注的方法在執(zhí)行前不會(huì)去檢查緩存中是否存在之前執(zhí)行過(guò)的結(jié)果,而是每次都會(huì)執(zhí)行該方法,并將執(zhí)行結(jié)果以鍵值對(duì)的形式存入指定的緩存中。

@CacheEvict 用來(lái)標(biāo)注在需要清除緩存元素的方法或類(lèi)上的。

當(dāng)然這些注解里面還有很多其他的屬性配置,配合 spring-el 表達(dá)式能做的事情還有很多,大概只有你想不到,沒(méi)有做不到。

在業(yè)務(wù)規(guī)則比較復(fù)雜的情況下,緩存 key 的設(shè)計(jì)相當(dāng)重要,設(shè)計(jì)出色可以使你的應(yīng)用飛起來(lái)。

整個(gè)集成工作就結(jié)束了,是不是很簡(jiǎn)單,上述算是 redis 的冰山一角,還有很多像 redis 路由/分布式/集群....,有機(jī)會(huì)實(shí)踐慢慢體會(huì)。

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

相關(guān)文章

  • Java實(shí)現(xiàn)文件批量重命名,移動(dòng)和刪除

    Java實(shí)現(xiàn)文件批量重命名,移動(dòng)和刪除

    這篇文章主要為大家介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)批量重命名,批量移動(dòng)文件,批量刪除tmp文件等功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • SpringBoot如何動(dòng)態(tài)改變?nèi)罩炯?jí)別

    SpringBoot如何動(dòng)態(tài)改變?nèi)罩炯?jí)別

    這篇文章主要介紹了SpringBoot如何動(dòng)態(tài)改變?nèi)罩炯?jí)別,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-12-12
  • 解決mybatis使用char類(lèi)型字段查詢(xún)oracle數(shù)據(jù)庫(kù)時(shí)結(jié)果返回null問(wèn)題

    解決mybatis使用char類(lèi)型字段查詢(xún)oracle數(shù)據(jù)庫(kù)時(shí)結(jié)果返回null問(wèn)題

    這篇文章主要介紹了mybatis使用char類(lèi)型字段查詢(xún)oracle數(shù)據(jù)庫(kù)時(shí)結(jié)果返回null問(wèn)題的解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Javaweb基礎(chǔ)入門(mén)requse原理與使用

    Javaweb基礎(chǔ)入門(mén)requse原理與使用

    Request對(duì)象的作用是與客戶(hù)端交互,收集客戶(hù)端的Form、Cookies、超鏈接,或者收集服務(wù)器端的環(huán)境變量,接下來(lái)本篇將詳細(xì)講述
    2021-11-11
  • 兩行Javascript代碼生成UUID的方法

    兩行Javascript代碼生成UUID的方法

    這篇文章主要介紹了兩行Javascript代碼生成UUID的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • SpringBoot中的ImportSelector類(lèi)動(dòng)態(tài)加載bean詳解

    SpringBoot中的ImportSelector類(lèi)動(dòng)態(tài)加載bean詳解

    這篇文章主要介紹了SpringBoot中的ImportSelector類(lèi)動(dòng)態(tài)加載bean詳解,ImportSelector接口是spring中導(dǎo)入外部配置的核心接口,根據(jù)給定的條件(通常是一個(gè)或多個(gè)注釋屬性)判定要導(dǎo)入那個(gè)配置類(lèi),在spring自動(dòng)化配置和@EnableXXX中都有它的存在,需要的朋友可以參考下
    2024-01-01
  • Springboot actuator應(yīng)用后臺(tái)監(jiān)控實(shí)現(xiàn)

    Springboot actuator應(yīng)用后臺(tái)監(jiān)控實(shí)現(xiàn)

    這篇文章主要介紹了Springboot actuator應(yīng)用后臺(tái)監(jiān)控實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • IntelliJ IDEA各種圖標(biāo)的含義

    IntelliJ IDEA各種圖標(biāo)的含義

    這篇文章主要介紹了IntelliJ IDEA各種圖標(biāo)的含義,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot中Bean拷貝及工具類(lèi)封裝的實(shí)現(xiàn)

    SpringBoot中Bean拷貝及工具類(lèi)封裝的實(shí)現(xiàn)

    本文主要介紹了SpringBoot中Bean拷貝及工具類(lèi)封裝的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 詳解SpringCloud服務(wù)認(rèn)證(JWT)

    詳解SpringCloud服務(wù)認(rèn)證(JWT)

    本篇文章主要介紹了SpringCloud服務(wù)認(rèn)證(JWT),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01

最新評(píng)論

美姑县| 梁平县| 正宁县| 西乡县| 大石桥市| 威远县| 南华县| 会宁县| 嵊泗县| 兰溪市| 霍州市| 化德县| 伊宁市| 乌兰浩特市| 尖扎县| 海兴县| 夏河县| 赤壁市| 桐乡市| 红桥区| 台东市| 屏东市| 梁平县| 庆安县| 鲁甸县| 龙游县| 巴青县| 莱西市| 六枝特区| 通城县| 鹿泉市| 沈丘县| 西和县| 三门县| 曲松县| 建平县| 武陟县| 都江堰市| 永嘉县| 吴川市| 阿拉善右旗|