springboot--redis配置

基于spring.version:4.x;
4.2.4.RELEASE
不同spring版本對應(yīng)的redis版本也不一樣找默,配置類也會不同。

添加pom:

<dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-redis</artifactId>
      <version>1.7.2.RELEASE</version>
</dependency>
<dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.8.1</version>
</dependency>

redis參數(shù)配置:RedisConfig.class

package com.chenglulu.api.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
@Data
public class RedisConfig {

    @Value("127.0.0.1")
    private String redisHost;

    @Value("3306")
    private Integer redisPort;

    @Value("123456")
    private String redisPassword;
}

redis配置類:RedisConfiguration.class

package com.chenglulu.api;

import com.chenglulu.api.config.RedisConfig;
import com.chenglulu.util.CryptorUtil;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;

import java.util.ArrayList;
import java.util.List;

@Configuration
public class RedisConfiguration {

    @Autowired
    private RedisConfig redisConfig;

    private static final Logger logger = LoggerFactory.getLogger(RedisConfiguration.class);

    @Bean
    public JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig config = new JedisPoolConfig();
        /*最大空閑數(shù)*/
        config.setMaxIdle(50);
        /*連接池的最大數(shù)據(jù)庫連接數(shù)*/
        config.setMaxTotal(30000);
        /*最大建立連接等待時間*/
        config.setMaxWaitMillis(100);
        /*是否在從池中取出連接前進(jìn)行檢驗,如果檢驗失敗,則從池中去除連接并嘗試取出另一個*/
        config.setTestOnBorrow(true);
        /*在空閑時檢查有效性, 默認(rèn)false*/
        config.setTestWhileIdle(false);

        return config;
    }

    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        String password = redisConfig.getRedisPassword();
       
        JedisConnectionFactory factory = new JedisConnectionFactory(jedisPoolConfig());

        factory.setHostName(redisConfig.getRedisHost());
        factory.setPort(redisConfig.getRedisPort());
        factory.setPassword(password);
        factory.setTimeout(100);
        factory.setDatabase(1);

        return factory;
    }

    @Bean(name = "redisTemplate")
    public StringRedisTemplate initRedisTemplate() {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();

        stringRedisTemplate.setConnectionFactory(jedisConnectionFactory());
        // 自定義Redis序列化器
//        RedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer();
//        RedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // 設(shè)置序列化器
//        stringRedisTemplate.setKeySerializer(stringRedisSerializer);
//        stringRedisTemplate.setValueSerializer(jdkSerializationRedisSerializer);
//        stringRedisTemplate.setHashKeySerializer(stringRedisSerializer);
//        stringRedisTemplate.setHashValueSerializer(jdkSerializationRedisSerializer);
//        stringRedisTemplate.setEnableTransactionSupport(true);
        return stringRedisTemplate;
    }


    @Bean(name = "redisCacheManager")
    public CacheManager initRedisCacheManager(StringRedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        // 設(shè)置超時時間為10分鐘晃酒,單位為秒
        cacheManager.setDefaultExpiration(600);
        // 設(shè)置緩存名稱
        List<String> cacheNames = new ArrayList<>();
        cacheNames.add("redisCacheManager");
//        cacheManager.setCacheNames(cacheNames);
        return cacheManager;
    }

}

redis工具類:redisUtils.class

package com.chenglulu.api.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;


@Service
public class RedisUtil {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) {
        this.stringRedisTemplate = stringRedisTemplate;
    }

    public StringRedisTemplate getStringRedisTemplate() {
        return this.stringRedisTemplate;
    }

    public RedisConnection getRedisConnection() {
        return this.stringRedisTemplate.getConnectionFactory().getConnection();
    }

    // 是否存在key
    public Boolean hasKey(String key) {
        return stringRedisTemplate.hasKey(key);
    }

    // 設(shè)置指定key的值
    public void set(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }

    // 獲取指定key的值
    public String get(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }
}

示例使用

@Service
public class redisService {
    @Autowired
    private RedisUtil redisUtil;

    public void setTestRedis(){
      RedisConnection redisConnection = getRedisConnection();
      
      try{
          redisUtil.set("test","123456");
      }catch(Exception e){
          
      }
      if(redisConnection != null){
        redisConnection.close();
      }
    }

    public String getTestRedis(){
      RedisConnection redisConnection = getRedisConnection();
      
      String value = null;
      try{
          if(redisUtil.hasKey("test")){
              value = redisUtil.get("test");
          };
      }catch(Exception e){
          
      }
      if(redisConnection != null){
        redisConnection.close();
      }
      return value;
    }

    /*判斷redis是否可用*/
    public RedisConnection getRedisConnection(){
        RedisConnection redisConnection = null;
        try {
            redisConnection = redisUtil.getRedisConnection();
        }catch (RedisConnectionFailureException e){
            logger.error("getRedisConnection RedisConnectionFailureException e = {}", e);
        }catch (Exception e){
            logger.error("getRedisConnection Exception e = {}", e);
        }
        if(redisConnection == null){
            //可以在redis有異常時做一些事情
        }
        logger.info("getRedisConnection RedisConnection is = {}", redisConnection);
        return redisConnection;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爽雄,一起剝皮案震驚了整個濱河市魏烫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌及穗,老刑警劉巖摧茴,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埂陆,居然都是意外死亡苛白,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門焚虱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來购裙,“玉大人,你說我怎么就攤上這事鹃栽□锫剩” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵民鼓,是天一觀的道長薇芝。 經(jīng)常有香客問我,道長丰嘉,這世上最難降的妖魔是什么夯到? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮饮亏,結(jié)果婚禮上耍贾,老公的妹妹穿的比我還像新娘。我一直安慰自己路幸,他們只是感情好荐开,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劝赔,像睡著了一般誓焦。 火紅的嫁衣襯著肌膚如雪胆敞。 梳的紋絲不亂的頭發(fā)上着帽,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音移层,去河邊找鬼仍翰。 笑死,一個胖子當(dāng)著我的面吹牛观话,可吹牛的內(nèi)容都是我干的予借。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灵迫!你這毒婦竟也來了秦叛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤瀑粥,失蹤者是張志新(化名)和其女友劉穎挣跋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狞换,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡避咆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了修噪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片查库。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖黄琼,靈堂內(nèi)的尸體忽然破棺而出樊销,到底是詐尸還是另有隱情,我是刑警寧澤脏款,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布现柠,位于F島的核電站,受9級特大地震影響弛矛,放射性物質(zhì)發(fā)生泄漏够吩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一丈氓、第九天 我趴在偏房一處隱蔽的房頂上張望周循。 院中可真熱鬧,春花似錦万俗、人聲如沸湾笛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嚎研。三九已至,卻和暖如春库倘,著一層夾襖步出監(jiān)牢的瞬間临扮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工教翩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杆勇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓饱亿,卻偏偏與公主長得像蚜退,于是被迫代替她去往敵國和親闰靴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351