SpringBoot2.X整合Redis

SpringBoot2.X整合Redis(集万篇之总结)

在学习过程当中偶然遇到了redis,深深感受到他的强大之处。本篇博客就SpringBoot整合redis,
springboot1.X与2.X整合方式略有不同,本篇着重介绍2.X整合方法;

GitHub地址:

https://github.com/Guoxxin/springbootRedis.git

环境配置:

  1. Springboot 2.0.6
  2. redis 3.2.100
    链接:https://pan.baidu.com/s/1rbZkjd8vtlm9-IHnIbhX8g
    提取码:wuly
  3. redis可视化工具
    链接:https://pan.baidu.com/s/1RKEkbs2qKQZ3PyABHaPTVQ
    提取码:20f4

项目结构图:

item.png

代码实现:

  1. pom.xml引入依赖

        
            org.springframework.boot
            spring-boot-starter-data-jpa
        
        
            org.springframework.boot
            spring-boot-starter-data-redis
        
        
            redis.clients
            jedis
            2.7.3
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
        
        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.boot
            spring-boot-starter-web
        
    

2.yml文件配置

spring:

  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/vueblog?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver

  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
  redis:
    host: 127.0.0.1
    port: 6379
    password:
    timeout: 3600ms #超时时间
    jedis:
      pool:
        max-active: 8 #最大连接数
        max-idle: 8 #最大空闲连接 默认8
        max-wait: -1ms #默认-1 最大连接阻塞等待时间
        min-idle: 0 #最小空闲连接

  1. 增加redis配置类 RedisConfig.java
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate template = new RedisTemplate<>();
        // 配置连接工厂
        template.setConnectionFactory(factory);
        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jacksonSeial.setObjectMapper(om);
        // 值采用json序列化
        template.setValueSerializer(jacksonSeial);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        // 设置hash key 和value序列化模式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(jacksonSeial);
        template.afterPropertiesSet();
        return template;
    }

    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
// 生成一个默认配置,通过config对象即可对缓存进行自定义配置
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        config = config.entryTtl(Duration.ofMinutes(1))     // 设置缓存的默认过期时间,也是使用Duration设置
                .disableCachingNullValues();     // 不缓存空值
        // 设置一个初始化的缓存空间set集合
        Set cacheNames =  new HashSet<>();
        cacheNames.add("timeGroup");
        cacheNames.add("user");
        // 对每个缓存空间应用不同的配置
        Map configMap = new HashMap<>();
        configMap.put("timeGroup", config);
        configMap.put("user", config.entryTtl(Duration.ofSeconds(120)));
        RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory)// 使用自定义的缓存配置初始化一个cacheManager
                .initialCacheNames(cacheNames)  // 注意这两句的调用顺序,一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
                .withInitialCacheConfigurations(configMap)
                .build();
        return cacheManager;
    }
}

4.redisTemplate具体使用方法

redisTemplate.opsForValue().set("你好啊","你好啊!!!");
效果1.png
ValueOperations vo = redisTemplate.opsForValue();
        vo.set("所有的博客",all);
效果二.png

查询缓存中的 “所有的博客” 缓存

@RequestMapping("/getRedisBlog")
    public Result getredisBlog(){
        ValueOperations operations = redisTemplate.opsForValue();
        Object result = operations.get("所有的博客");
        return new Result(200,"获取成功",result);
    }

效果3.png

ValueOperations接口说明

这个接口的实现类为DefaultValueOperations,default这个类同时继承AbstractOperation,我们来看下这个类的构造函数:

DefaultValueOperations(RedisTemplate template) {
super``(template);
}

这个类非公开的,需要传入template来构造。但是我们是无法访问的。不过不要急,在RedisTemplate中,已经提供了一个工厂方法:opsForValue()。这个方法会返回一个默认的操作类。另外,我们可以直接通过ValueOperations operations = redisTemplate.opsForValue();来进行注入。
opsForValue()集合使用说明
1). set(K key,V value)
新建缓存
redisTemplate.opsForValue().set("key","value");
2). get(Object key)
获取缓存
edisTemplate.opsForValue().get("key");
具体可见 https://357029540.iteye.com/blog/2388965
讲的特别详细!!!

如果本篇文章对您有帮助的话,赞一下莫不是对我最大的鼓励!

致敬学习路上的你!

你可能感兴趣的:(SpringBoot2.X整合Redis)