本知识点沿用知识点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的方式很简洁,但是我要说两点:
一、我在上面代码注入的时候用的是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