欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Jredis和SpringDataRedis学习笔记

Jredis和SpringDataRedis学习笔记

2025/3/28 9:45:26 来源:https://blog.csdn.net/2302_77493813/article/details/145674117  浏览:    关键词:Jredis和SpringDataRedis学习笔记

jredis基础操作

jredis连接池

其中有个静态方法getJedis能够将练级池中的连接拿取出来并返回

通过setMaxWaitMitllis设置一个响应时间,如果连接池里面没有连接,那么请求连接方在等待超过响应时间时就会报错

springDataRedis

通过这样一个代码将redisTemplate进行装载并且进行注入依赖,并完成对redis的连接

package com.example.demo;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;@SpringBootTest
class Demo1ApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid contextLoads() {redisTemplate.opsForValue().set("name", "顶针");Object name = redisTemplate.opsForValue().get("name");System.out.println(name);}}

序列化

有一点我们需要注意

当我们使用Java代码写入数据的时候

其默认会使用jdk序列化

我们通过源码进行解读,当我们点进去redisTemplate的源码时

我们发现有四个序列化,其分别是对key value进行序列化和对hash里面的key和value进行的序列化

而当我们没有定义这四个序列化的值的时候

我们就会执行下面这一段代码的序列化,这一段代码的序列化采用的是jdk的序列化

我们再次跟进set方法观察set的源码

当我们点进去的时候我们会在rawValue里将对应的value转换为字节数组

当我们接着跟进rawValue()的构造方法,我们会发现里面有我们之前提到过的valueSerializer四个序列化之中的一个序列化,其中他会尝试获取value的序列化值,当我们点进去serialize方法里面

我们会发现serialize使用的是jdk的序列化工具,当我们再次点进去convert的方法里面时

再次点击进入serializeToByteArray方法里面

会发现这样一个方法

当我们再次点击进去,我们就会发现我们使用了objectOutPutStream()这个方法以及接下来的一系列方法都是将Java对象转换为字节并写入redis中,这样的jdk序列化是非常不好的

那么我们有没有一种更好用的序列化呢?

我们观察序列化方法,里面有一个StringRedisSerializer方法是专门用于字符串进行序列化的

当我们的key和hashkey都是字符串的时候可以使用它进行序列化

使用实例

当我们向redis中写入一个对象时,我们通过我们设置的redistemplate将对应的value值转换为了json格式的对象

并且我们存入redis时会有一个@Class的对象标记,这样我们就可以在读取的时候,通过读取字节码来进行反序列化从而将一个json串变成一个对象

但是要注意,将user的字节码写入redis会出现额外的内存开销

所以为了节省空间,我们只能够将value值以字符串的形式存入内存中,然后再手动的进行序列化和反序列化

StringRedisTemplate

大致使用如下

主要要点是因为stringRedisTemplate这个类的key和value都是需要传入一个字符串对象的

假若我们想要传入一个类需要用json序列化的工具将其转换为字符串

常见的有ObjectMapper这种工具,这个来自于springmvc里面的工具

当读取redis里面的数据的时候,也是需要进行反序列化,从redis里面拿取的数据依旧是字符串,同样需要objectMapper进行json串的逆序列化转换为一个对象

使用方法如下所示

hash值的存取

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词