【Springboot】Springboot2 集成 redis 踩坑

今天用Springboot2集成redis的时候,一开始是用以前的方法出了很多问题。一查才知道Springboot2使用 lettuce 作为默认的redis client。所以配置文件里别配置jedis的参数了,配置lettuce pool。 还想用 jedis 的需要自己在 pom 文件手动添加 jedis client 的依赖。

redis:
    database: 0
    host: 192.168.1.210
    port: 6379
    password: password
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0

完了还有一个问题就是会报一个错误, 大概就是

ClassNotFoundException: org.apache.commons.pool2.impl.GenericObjectPoolConfig

需要手动添加 commons pool 的依赖

<!-- redis lettuce pool 需要这个依赖 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.6.2</version>
        </dependency>

最后一个问题就是在自定义 RedisTempelate 的时候, 使用以下代码会报错 Spring 容器中找不到 RedisConnectionFactory

@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisConfig {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer<Object> redisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        redisSerializer.setObjectMapper(mapper);
        template.setValueSerializer(redisSerializer);

        template.setKeySerializer(new StringRedisSerializer());
        template.afterPropertiesSet();

        return template;
    }
}

但是实际上这个bean是存在的,因为 redis 的默认配置类也使用了这个Bean。 项目跑起来也是报错,RedisConnectionFactory is required

最后是在自动注入的时候修改了默认RedisTemplate 的 属性,解决了这个问题。

@Component
public class RedisCenter {

    private RedisTemplate<Object, Object> redisTemplate;

    public void expire(Object key, Object value, long time, TimeUnit unit) {
        redisTemplate.opsForValue().set(key, value, time, unit);
    }

    public Object get(Object key) {
        return redisTemplate.opsForValue().get(key);
    }

    @Autowired
    public void setRedisTemplate(RedisTemplate<Object, Object> redisTemplate) {
        Jackson2JsonRedisSerializer<Object> redisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        redisSerializer.setObjectMapper(mapper);
        redisTemplate.setValueSerializer(redisSerializer);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        this.redisTemplate = redisTemplate;
    }
}

原文地址:https://www.cnblogs.com/yeyeck/p/12164350.html

时间: 2024-11-07 23:26:27

【Springboot】Springboot2 集成 redis 踩坑的相关文章

SpringBoot整合集成redis

Redis安装:https://www.cnblogs.com/zwcry/p/9505949.html 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http:

.NetCore集成Dapr踩坑经历

该篇内容由个人博客点击跳转同步更新!转载请注明出处 前言 之前自己有个core2.2的项目一直是用的Surging作为微服务框架的,后来了解到了Dapr,发现比较轻量级,开发部署等也非常方便,故将自己的程序升级到了3.0同时框架改成了Dapr,网上查到的好多Dapr文章基本都是大差不同,大都是用的GIT上的示例或者是直接文章翻译很少有提到实战上的一些问题,下面我把我自己遇到的一些问题和解决方法记录一下同时大致讲下安装集成步骤. 前期准备 安装 Docker(dapr安装完后会在Docker中生成

redis踩坑记

本来打算给一批主库做从库,用来读取数据,还不想碰主库数据. 主库redis2.8.12,从库一开始没注意,docker了一个3.1的,结果slaveof之后命令不兼容,下了一个2.8的(2.8.23好像),还是不兼容. 最后github编译了一个2.8.12 保持小版本一致,才算是能同步了 然后 I/O error reading bulk count from MASTER错误 此时,两个主机并没有流量 主库没日志,好不容易要到主库机器密码,配置了日志,发现主库打这样的日志: psync sc

Springboot2.x集成Redis哨兵模式

Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar <!-- 集成Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</arti

SpringBoot集成Redis来实现缓存技术方案

概述 在我们的日常项目开发过程中缓存是无处不在的,因为它可以极大的提高系统的访问速度,关于缓存的框架也种类繁多,今天主要介绍的是使用现在非常流行的NoSQL数据库(Redis)来实现我们的缓存需求. Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件,Redis 的优势包括它的速度.支持丰富的数据类型.操作原子性,以及它的通用性. 案例整合 本案例是在之前一篇SpringBoot + Mybatis + RESTful的基础上来集

记录redis的一次踩坑(提醒诸位)

#背景:来公司之前redis跑的是单主,无备份,rdb和aof都没有,于是我就决定做一个主从,在从上做rdb备份,本着资源充分利用的心理,在一台memcache上做了redis从,memcache这台内存富余50G左右. 周末陆续收到报警redis从机这一台内存富余不足,怕影响到memcache服务,于是决定把redis从的rdb备份关掉,因为在bgsave的时候内存占用会变成双倍,修改配置文件注释掉save那几条重启. 故障就发生了:因为主从重启的时候,主会做一次bgsave操作生成rdb文件

springboot集成redis详解

欢迎扫码加入Java高知群交流 springboot集成redis非常简单 1.引入maven依赖redis包 <!-- springboot整合 redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> 2.appli

redis从入门到踩坑

背景 Redis在互联网项目的使用也是非常普遍的,作为最常用的NO-SQL数据库,对Redis的了解已经成为了后端开发的必备技能.小编对Redis的使用时间不长,但是项目中确两次踩中了Redis的坑,今天特意从基础知识层面到实战层面对Redis知识进行梳理,能够达到对Redis的知识体系有更全面和深入的理解. Redis的特点 优点: Key-Value类型的内存数据库,是加强版的Memcached. 整个数据库都是在内存中进行操作的,并且定期异步持久化数据到硬盘上进行保存. 在内存中进行操作,

SpringBoot集成Redis分布式锁以及Redis缓存

https://blog.csdn.net/qq_26525215/article/details/79182687 集成Redis 首先在pom.xml中加入需要的redis依赖和缓存依赖 <!-- 引入redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifa