springboot--redis配置

基于spring.version:4.x;
4.2.4.RELEASE
不同spring版本对应的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参数配置: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();
        /*最大空闲数*/
        config.setMaxIdle(50);
        /*连接池的最大数据库连接数*/
        config.setMaxTotal(30000);
        /*最大建立连接等待时间*/
        config.setMaxWaitMillis(100);
        /*是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个*/
        config.setTestOnBorrow(true);
        /*在空闲时检查有效性, 默认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();
        // 设置序列化器
//        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);
        // 设置超时时间为10分钟,单位为秒
        cacheManager.setDefaultExpiration(600);
        // 设置缓存名称
        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);
    }

    // 设置指定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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352