Springboot整合redis

单机版,简单配置。【小白级别】
【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

filenewmodule.png

选择spring initializr
Spring initializr.png

点击next,基本不用改动
image.png

点击next,选择web 然后选中Web ,在这里我们可以选择springboot 版本,我选择的是2.1.3版本的。
image.png

点击next 最后点击finish。springboot项目创建完成。
2.在pom.xml文件中引入redis


    org.springframework.boot
    spring-boot-starter-data-redis

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
image.png

4.新建一个Redis配置类
其实Springboot自动在容器内帮我们生成了一个RedisTemplate和一个StringRedisTemplate,我们在项目内直接可以引入使用。
但是这个RedisTemplate的泛型是我们用起来不是很方便,要各种转换类型,我们需要新建一个泛型的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 redisTemplate(RedisConnectionFactory factory){
        RedisTemplate template = new RedisTemplate();
        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;
    }
}

建好后,我们可以直接在项目中引用泛型的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 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."}) 多个不同的以逗号分割。【我用的第二种方法】

image.png

你可能感兴趣的:(Springboot整合redis)