当前位置: 首页 > news >正文

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 {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void 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值的存取

相关文章:

  • 大数据开发治理平台~DataWorks(核心功能汇总)
  • AI 编程助手 cursor的系统提示词 prompt
  • 《A++ 敏捷开发》- 20 从 AI 到最佳设计
  • 鸿蒙状态管理概述
  • python shlex
  • ROS2--动作通信
  • 代码随想录刷题day23|(字符串篇)54. 替换数字
  • 基于 LangChain 实现数据库问答机器人
  • CUDA Toolkit 历史版本 cuda安装
  • C++ Qt项目教程:WebServer网络测试工具
  • C++ Primer 构造函数再探
  • 深入HBase——数据结构与算法
  • POI pptx转图片
  • Python 库自制 Cross-correlation 算法(当采样点已经1 对 1 匹配)
  • 2025-2-19学习笔记 : this关键字,constructor结构体,class类
  • 洛谷 P2234 [HNOI2002] 营业额统计(详解)c++
  • 2025软件测试就业形势剖析:机遇与挑战交织
  • 深入探讨优先队列:原理、实现与应用
  • 用deepseek学大模型05逻辑回归
  • 力扣每日一题【算法学习day.129】
  • 融创中国:境外债务重组计划聆讯定于9月15日召开
  • 印称印巴军事行动总指挥同意将局势降级
  • 《审判》|“被告”的魅力:K在等什么?
  • 超新星|罚丢点球的那道坎,刘诚宇靠自己迈了过去
  • 中国目的地·入境游简报006|外国网红游中国启示录
  • “电竞+文旅”释放价值,王者全国大赛带火赛地五一游