单机版,简单配置。【小白级别】
【Springboot+redis】
springboot 2.x与 redis5.x
确保redis安装成功并能成功启动,我用的是自己在虚拟机docker容器安装配置的redis 版本应该是5.0.3的。
Docker 配置安装Redis可以参考我的Docker配置Redis
本文用的开发工具是IntelliJ IDEA
springboot 整合redis
1.新建springboot项目
File-->New--Module
选择spring initializr
点击next,基本不用改动
点击next,选择web 然后选中Web ,在这里我们可以选择springboot 版本,我选择的是2.1.3版本的。
点击next 最后点击finish。springboot项目创建完成。
2.在pom.xml文件中引入redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3.maven导入相关jar包后,我们需要修改application.properties配置文件
以下是redis 2.x的相关配置
Redis数据库索引(默认为0)
spring.redis.database=0
Redis服务器地址
spring.redis.host=localhost
Redis服务器连接端口
spring.redis.port=6379
Redis服务器连接密码(默认为空)
spring.redis.password=root
连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=8
连接池最大阻塞等待时间(使用负值表示没有限制)【我配置这个的时候报红色标,最后我就直接 spring.redis.jedis.pool.max-wait=,因为在RedisProperties类里面有默认的配置,所以可以直接=空,max-wait、max-idle、以及min-idle也均有默认配置值】
spring.redis.jedis.pool.max-wait=-1
连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
连接超时时间(毫秒)
spring.redis.timeout=10000ms
server.port=8004
spring.redis.database=1
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.timeout=10000s
4.新建一个Redis配置类
其实Springboot自动在容器内帮我们生成了一个RedisTemplate和一个StringRedisTemplate,我们在项目内直接可以引入使用。
但是这个RedisTemplate的泛型是<Object,Object>我们用起来不是很方便,要各种转换类型,我们需要新建一个泛型<String,Object>的RedisTemplate。
并且,这个RedisTemplate没有设置数据存在Redis时,key及value的序列化方式。
代码如下:[代码来源于https://www.cnblogs.com/zeng1994/p/03303c805731afc9aa9c60dbbd32a323.html]
package com.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
@SuppressWarnings("all")
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
建好后,我们可以直接在项目中引用泛型<String,Object>的RedisTemplate了。
我做的一个示例Controller:
package com.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/demo")
public class RedisController {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
@RequestMapping(value = "/hello")
public Object hello(){
redisTemplate.opsForValue().set("www","1111111");
return redisTemplate.opsForValue().get("www");
}
}
其实,我们可以做一个工具类来使用redis。对于各位来说应该很简单吧。
遇到的问题:
1.在启动springboot的过程中,我遇到了端口冲突,所以我在配置文件中指定了项目启动端口号
server.port=8004
2.项目启动后,发起请求,出现了404。在网上看了一下,是因为Spring Boot默认只会扫描启动类当前包和以下的包,我写的controller和springboot启动类未在一个包或者包下面。所以在
解决方案有两种:
一、以启动类的包路径作为顶层包路径,例如启动类包为com.mySpringBoot,那么Controller包路径就为com.mySpringBoot.controller。
二、在启动类上面加注解@ComponentScan,此注解为指定扫描路径,例如:@ComponentScan(basePackages = {"com.mySpringBoot.,com.mySpringBoot.work."}) 多个不同的以逗号分割。【我用的第二种方法】