Redis : 一个NoSQL数据库, 常用作 缓存使用 (cache)
Redis的数据类型: string , hash ,set ,zset , list….另外两种不常用的:bitmap(位图类型),geo(地理位置类型),另外Redis5.0新增 stream类型
Redis是一个中间件: 是一个独立的服务器(完成某些功能)
java 语言中使用的客户端库有 Jedis,lettuce, Redisson 等
Spring Boot 中使用 RedisTemplate 模版类操作 Redis 数据交互
另外还有一个StringRedisTemplate
RedisTempalte和StringRedisTemplate的区别:简单点说由于序列化方式不同,RedisTemplate的可读性差,RedisTemplate默认用JDK序列化,StringRedisTemplate用的是String序列化
StringRedisTemplate : 把k,v 都是作为String处理, 使用的是String的序列化 , 可读性好
RedisTemplate : 把k,v 经过了序列化存到redis。 k,v 是序列化的内容, 不能直接识别.
默认使用的jdk序列化, 可以修改为前提的序列化
序列化:把对象转化为可传输的字节序列过程称为序列化。(对象保存到磁盘)
反序列化:把字节序列还原为对象的过程称为反序列化。(从磁盘中取出对象)
官网:Redis
Redis官网下载包都是Linux系统用的
微软将Redis改造了下适合Windows系统,用来测试用
关于一些基本命令:Redis资料整理_biubiubiu0706的博客-CSDN博客
这里用windows 即本地测试使用 Redis解压目录不要有中文
Redis的图形界面客户端
也有另外的RedisClient差不多的图形界面客户端
SpringBoot中集成Redis使用
选择Spring WEB 和Spring data Redis演示
SpringBoot中Redis的起步依赖 这样项目中可以直接使用RedisTemplate和StringRedisTemplate
org.springframework.boot spring-boot-starter-data-redis
SpringBoot中使用的核心就是洋葱头lettuce 来操作Redis
在程序中使用RedisTemplate类的方法取操作Redis中的数据,实际就是调用洋葱头lettuce客户端底层中的方法
下面在application.properties中设置Redis的相关信息
RedisTemplate中的一些方法,其实就是添加String的方法,list的方法,set方法,zset放等等 几种类型都有
postman测试
这里改下 原先设置了保存时长为1秒……改下 改成保存60秒
保存在redis里的数据,数据为什么是这样的,原因,序列化,下面会说明解决这问题,其实也没关系
原因是它使用的是JDK序列化
其实设置不设置序列化格式,是不影响的,只是可读性差点
测试取值OK
1分钟过后,再取值
下面用StringRedisTemplate测试
用redis客户端查看下
测试取值
上面已经可以看出RedisTemplate和StringRedisTemplate的区别了
为什么需要序列化
序列化最终的目的是为了对象可以跨平台存储,和进行网络传输。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组。我们必须在把对象转成字节数组的时候就制定一种规则(序列化),那么我们从IO流里面读出数据的时候再以这种规则把对象还原回来(反序列化)。
什么情况下需要序列化
通过上面我想你已经知道了凡是需要进行“跨平台存储”和”网络传输”的数据,都需要进行序列化。
本质上存储和网络传输 都需要经过 把一个对象状态保存成一种跨平台识别的字节格式,然后其他的平台才可以通过字节信息解析还原对象信息。
Java 中序列化方式有两种: 记住1和2 有些人说String序列化,其实指的是
StringRedisSerializer
这个问题各有各说话,明白就好
Java 序列化(JDK序列化):通过实现 Serializable 接口,并使用 ObjectInputStream 和 ObjectOutputStream 类对对象进行序列化和反序列化。这种方式序列化后的数据可读性差,可移植性差,但支持循环引用和对象图的存储。
JSON 序列化:将 Java 对象转换为 JSON 格式,通过 JSON 库将其写入文件或传输到其他系统,也可以将 JSON 格式的数据反序列化为 Java 对象。这种方式序列化后的数据可读性好,可移植性好,但不支持循环引用和对象图的存储。
XML序列化:将Java对象序列化成XML格式的字符串或将XML字符串反序列化成Java对象。可以使用第三方库如JAXB、XStream等来进行XML序列化。
Protocol Buffers序列化:Google开发的一种高效的序列化方式,可以将数据结构序列化成二进制格式的数据,提供了代码生成工具来生成序列化/反序列化所需的Java类。
Avro序列化:一种高性能的二进制数据序列化格式,支持动态的数据类型定义,可以使用Apache Avro库来进行序列化。
那么我们能否将RedisTemplate保存到Redis中那种看不懂的序列化方式改一下呢,就是将JDK序列化改成看的懂的(String序列化” />
点进去 看下RedisSerializer是什么
它是个接口,实现类就是所有序列化的方式 也可以看到其实说的String序列化其实就是StringRedisSerializer
在用RedisTemplate存取值之前设置序列化
测试
一般实际开发会配置一下(不然每次存取值都要设置) 如下@suppresswarnings(“all”)注解告诉编译器对被注解的作用域内部所有类型的警告保持静默。
关于JSON序列化测试
idea 配置实现序列化生成UID的方式
序列化版本号用于序列化后反序列化
下面将Student对象保存到Redis
可以看到又乱了
设置下
报错了 类型转换异常
存在redis的是Student(id=1, name=哈哈, age=18)
取出来
取出来,注意很麻烦关键是Student(id=1, name=哈哈, age=18)怎么转对象
JSON序列化就可以解决这问题
测试 存