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操作各个基本类型工具类的抽取
springboot分析——与其他组件的整合(JPA规范/atomikos/redis)