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

这个问题各有各说话,明白就好

  1. Java 序列化(JDK序列化):通过实现 Serializable 接口,并使用 ObjectInputStream 和 ObjectOutputStream 类对对象进行序列化和反序列化。这种方式序列化后的数据可读性差,可移植性差,但支持循环引用和对象图的存储。

  2. JSON 序列化:将 Java 对象转换为 JSON 格式,通过 JSON 库将其写入文件或传输到其他系统,也可以将 JSON 格式的数据反序列化为 Java 对象。这种方式序列化后的数据可读性好,可移植性好,但不支持循环引用和对象图的存储。

  3. XML序列化:将Java对象序列化成XML格式的字符串或将XML字符串反序列化成Java对象。可以使用第三方库如JAXB、XStream等来进行XML序列化。

  4. Protocol Buffers序列化:Google开发的一种高效的序列化方式,可以将数据结构序列化成二进制格式的数据,提供了代码生成工具来生成序列化/反序列化所需的Java类。

  5. 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序列化就可以解决这问题

测试 存