spring boot 2.7 整合redis
boot的依赖基本都有自己一套默认配置,如果有额外配置需求才应该改动它,否则请保持原样 你是来写代码的,不是写配置文件的!今天简单整理一下基于 spring boot 2对于redis的整合演示,如果你想更好的使用redis 这或许会有用。因为@Autowired的类型注入可能找不到我们规定泛型的类型,这种注入方式也不规范,开发中不建议使用。2.说人话就是 -不需要-大神已经封装好的工具没必要动
1.引入依赖
//注意:spring boot默认集成了两个starter供选择
//另一个 -spring-boot-starter-data-redis-reactive- 为链式编程依赖包,该编程方式还在崛起阶段,这里不介绍。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.添加配置
#添加你的redis服务器配置,注意你的redis是否有密码
spring:
redis:
database: 0
port: 6379
password: 123123
host: 120.23.156.165
3.注入操作对象
//启动spring boot后,框架会自动扫描配置项并创建多种类型的redis操作对象
@Resource
private RedisTemplate<String,Object> redisTemplate; //对象存取使用它
@Resource
private StringRedisTemplate stringRedisTemplate; //简单类型使用它
4.存取对象或数据
//演示简单类型存取
String key = "Hello";
String value = "Redis";
stringRedisTemplate.opsForValue().set(key,value);
stringRedisTemplate.opsForValue().get(key);
...
//演示复杂对象存取(属性age=12 name=张三)
Student stu1 = new Student(12,"张三"); //准备对象
redisTemplate.opsForValue().set("stu1",stu1); //存入对象
Student stu = redisTemplate.opsForValue().get("stu1"); //取出对象
5.问题解答
- redisTemplate注入报空指针异常?
1.尝试使用@Resource(先按名称,找不到则按类型)注入而不是@Autowired(类型注入)
因为@Autowired的类型注入可能找不到我们规定泛型的类型,这种注入方式不规范,开发中不建议使用
2.使用Test运行时读取配置文件可能会有问题 请使用@TestPropertySource解决
- redisTemplate注入报其它异常?
1.假如你使用了Resource注入方式,请确保按名称注入的对象是你想注入的对象,以下写法由于类型不匹配会报错(按名称找到的对象为RedisTemplate类型,类型赋值给StringRedisTemplate类型不被允许,报错)
@Resource
private StringRedisTemplate redisTemplate;
- 网上教程都封装了工具类,我需要吗?
不需要,引入的依赖除了集成连接外,提供了官方工具类(即上面使用到的两个) 它们很好用
- 通过redisTemplate为何取不到自己设置的值?
取值和设置值都使用redisTemplate对象就没问题了,取值为空因为工具底层进行了封装,你使用其它方法存进去的key与value不会被转码,但使用redisTemplate默认存取都是按照iso8859-1对键值对进行序列化,所以取不出正常值。存取工具对等就不会出问题(很多朋友设置配置文件解决此问题,没必要,会用工具很重要)
查看底层源码发现,redisTemplate从2.1开始默认序列化方式是U8,上方介绍部分是对的Obtain a simple String to byte[] (and back) serializer using UTF-8 as the default java.nio.charset.Charset. 返回值:never null.自:2.1
源码如下:
static RedisSerializer<String> string() {
return StringRedisSerializer.UTF_8;
}
结论:通过统一工具存取不会出现问题,通过其它工具存,redisTemplate取,可能拿不到,因为工具与工具之间的编码格式不统一,最优解是使用最新sdk,统一电脑全局编码为U8
- 为何别人有大量配置?
如果你的redis装在本机了,那么跳过 2.添加配置 步骤,你还是可以优雅的使用redis,为什么?
对于spring boot项目,我们最不需要的就是去写大量配置文件,因为各种依赖包默认都提供了它们认为最优解的配置,我们只需要修改一些不得不改的配置(例如这段数据源配置jdbc:mysql://localhost:1121/authe_0?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8,因为提供工具的官方也猜不出来你到底要连接哪个数据库,但是redis官方猜到了你要连的数据库是db0,还猜到了你的redis端口是6379)
至于别人为何出现大量无意义配置,我也不知道…
更多推荐
所有评论(0)