Redis的配置与SpringBoot整合Redis

Posted 乔有点小二

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis的配置与SpringBoot整合Redis相关的知识,希望对你有一定的参考价值。

1.Redis的安装

这里不详细介绍Redis的安装过程,相信大家也很容易搜到的。Redis安装可以参考 https://www.cnblogs.com/limit1/p/9045183.html

2.SpringBoot整合Redis

(1)配置 application.properties或者是application.yml,这两个都是springBoot默认的配置文件(在resources目录下)

application.yml配置如下:

server:
port: 8080

spring:
redis:
# Redis数据库索引(默认为0)
database: 0
# redis服务器地址
host: 192.168.23.131
# redis服务器连接端口
port: 6379
# redis服务器连接密码(默认为空)
password:
# 连接超时时间(毫秒)
timeout: 5000

pool:
# 连接池最大连接数(负值表示没有限制)
max-active: 200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: 10000
# 连接池最大空闲连接
max-idle: 10
# 连接池最小空闲连接
min-idle: 0

application.properties:

# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=20
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=10
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=1000

 引入依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

(2)编写配置类,代码如下

/**
 * @Author qiaohan
 * @Date 2020/5/20 14:25
 * @Description redis配置类
 */
@Configuration
public class RedisConfiguration {

    /**
     * 创建 RedisTemplate Bean
     * Bean需要在@Configuration注解下进行创建,产生这个Bean对象的方法Spring只会调用一次,随后放入Spring IOC 容器中
     * @param factory RedisConnectionFactory。Spring会将入参根据类型注入,若存在多个根据名称匹配,找不到会报错
     * @return RedisTemplate<String, Object>。存在于IOC容器中的单例 Bean
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        //om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
                                 ObjectMapper.DefaultTyping.NON_FINAL,
                                 JsonTypeInfo.As.PROPERTY);
        serializer.setObjectMapper(om);
        StringRedisSerializer srSerializer = new StringRedisSerializer();
        // key采用String的序列化方式
        redisTemplate.setKeySerializer(srSerializer);
        // hash的key也采用String的序列化方式
        redisTemplate.setHashKeySerializer(srSerializer);
        // value序列化方式采用jackson
        redisTemplate.setValueSerializer(serializer);
        // hash的value序列化方式采用jackson
        redisTemplate.setHashValueSerializer(serializer);
        redisTemplate.afterPropertiesSet();

        return redisTemplate;
    }

}
说明:
从代码中可以看到,ObjectMapper.setVisibility()方法已经废弃了,一般废弃的方法都会有相应的替代方法,查看源码可以发现给出了替代的方法,这里采用的是
        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
                                 ObjectMapper.DefaultTyping.NON_FINAL,
                                 JsonTypeInfo.As.PROPERTY);

3.Redis配置

一般情况下,Redis安装好后并不能被其它服务直接访问,springBoot连接redis会报错:

org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.

RedisConnectionException: Unable to connect to 192.168.23.131:6379

验证:通过cmd telnet命令测试端口是否畅通

需要进行相应的配置

(1)关闭redis保护模式

进入redis安装目录,编辑redis配置文件

 输入命令:vim redis.conf

将 bind 127.0.0.1 注释掉,protected-mode修改为no

 (2)到Linux终端输入命令:

firewall-cmd --query-port=6379/tcp

如果返回no,那么证明6379端口确实没有开启

输入 firewall-cmd --add-port=6379/tcp,将6379端口开启,返回success

然后再执行上一条命令 firewall-cmd --query-port=6379/tcp,返回yes,证明端口已经成功开启

 (3)这个时候我们再次 telnet,发现redis的7379端口还是不通

 

 输入Linux命令:

ps -ef | grep redis

 

 发现redis 6379端口服务是开启的,只不过ip是127.0.0.1,只能本机使用,外部无法访问

 需要通过配置文件启动redis

cd /usr/local/redis/bin

./redis-server ./redis.conf

 

Linux关闭redis

可通过杀进程的方式强制关闭redis

netstat -nltp

找到 redis的PID

kill -9 pid

 

以上是关于Redis的配置与SpringBoot整合Redis的主要内容,如果未能解决你的问题,请参考以下文章

REDIS05_SpringBoot整合redisRedisTemplate操作各个基本类型工具类的抽取

Spring整合redis

Redis学习之旅--与SpringBoot的结合

springboot分析——与其他组件的整合(JPA规范/atomikos/redis)

springboot整合redis,推荐整合和使用案例(2021版)

Redis---整合SpringBoot篇