本知识点沿用知识点14项目,为大家介绍spring boot如何整合redis,没有redis的去我的主页各类型大数据集群搭建文档–>大数据原生集群本地测试环境搭建三有redis的搭建,redis在spring boot中使用时,虽然没有ES那样在版本上的问题,但是它有个注解问题要注意,我后面会说,我们先来看如何使用redis

第一步:添加依赖

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

第二步:配置spring boot的配置文件

spring.redis.host=192.168.88.188
spring.redis.port=6379

第三步:准备一个测试类,使用redis

package com.wy.scjg;

import com.wy.scjg.bean.User;
import com.wy.scjg.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;

import javax.annotation.Resource;
import java.util.List;

@SpringBootTest
public class RedisTest {

    @Resource
    private RedisTemplate redisTemplate;

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private UserService userService;

    @Test
    void test(){
        List<User> list = userService.list();
        for(User user:list){
            //RedisTemplate 操作方式
            //redisTemplate.opsForValue().set(user.getId().toString(),user);
            System.out.println(redisTemplate.opsForValue().get(user.getId().toString()));

			//StringRedisTemplate 操作方式 
            //stringRedisTemplate.opsForValue().set("1","1");
            //System.out.println(stringRedisTemplate.opsForValue().get(user.getId().toString()));
        }
    }

}

最后无论用那种方式,先运行set方法在运行get看结果

Spring boot 从 redis获取为字符串 springboot整个redis_redis


spring boot操作redis的方式很简洁,但是我要说两点:

一、我在上面代码注入的时候用的是Resource,这个注解个人不推荐大家用,我这边发生一个很迷的时,我先使用Autowired时报错,无该类型的bean,使用Resource运行成功后Autowired可以用了,这点大家在操作的时候注意你的Autowired注解是否可以首次注入成功。

之所以不推荐使用,是因为Resource这个注解在个别版本的JAVA JDK中是不让使用的,网上对于不能使用这一问题,给了一个解决方法,导入下面这个包

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

注意网上也有人导jsr250包,千万不要导250包,这个包和它的名字一样,它极容易导致冲突,以及可能导致你的service注解失效。

话说回来,你手动导入javax.annotation-api包,也有一定概率导致包冲突,所以大家用的时候要注意这个问题。

二、RedisTemplate 和 StringRedisTemplate 它们是继承关系,StringRedisTemplate 继承自 RedisTemplate ,并将key和value泛型为了String类型,使用上来说StringRedisTemplate 的可读性高

这是因为RedisTemplate 系列化用的是JAVA的Serializable,而StringRedisTemplate 的系列化用的是String类型的系列化,相比之下String类型多了对字节数组的解析,按情况使用,如果你读取操作多,建议使用StringRedisTemplate 因为RedisTemplate操作系列化乱码key对使用不友好

两个类的系列化方式不是定死的,可以变,比如使用RedisTemplate 的时候将系列化方式改成StringRedisTemplate 的

redisTemplate.setKeySerializer(new StringRedisSerializer());

redisTemplate.setValueSerializer(new StringRedisSerializer());

而且如果你向外提供数据的话,你可以将key设置成可读性高的,value设置成json的格式

redisTemplate.setKeySerializer(new StringRedisSerializer());

redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(XXX.class));

XXX.class是你的实体Bean的class对象

到此本篇知识点讲解结束,此外 本次整体讲解的spring boot项目已上传github