Redis学习篇2:Redis在IEDA中的应用

本文继上文开始讲述了Redis在IDEA中如何应用以及集成进入spring开发环境,以及如何使用Redis客户端。上一个文章:Redis学习篇1:初识Redisicon-default.png?t=N7T8https://blog.csdn.net/jialuosi/article/details/139057088

一、Redis在java中的客户端

二、SpringDataRedis

三、SpringDataRedis快速入门

3.1、使用SpringDataRedis

3.2、序列化与反序列化

3.3、StringRedisTemplate


一、Redis在java中的客户端

  • Jedis和Lettuce:这两个主要是提供了Redis命令对应的API,方便我们操作Redis,而SpringDataRedis又对这两种做了抽象和封装,因此我们后期会直接以SpringDataRedis来学习。

  • Redisson:是在Redis基础上实现了分布式的可伸缩的java数据结构,例如Map.Queue等,而且支持跨进程的同步机制:Lock.Semaphore等待,比较适合用来实现特殊的功能需求。

上述两种是相当于原生的java客户端,在目前大部分都是spring的开发环境下,早已不流行使用,接下来我们着重的讲一下SpringDataRedis。

二、SpringDataRedis

SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址:Spring Data Redis

  • 提供了对不同Redis客户端的整合(Lettuce和Jedis)

  • 提供了RedisTemplate统一API来操作Redis

  • 支持Redis的发布订阅模型

  • 支持Redis哨兵和Redis集群

  • 支持基于Lettuce的响应式编程

  • 支持基于JDK.JSON.字符串.Spring对象的数据序列化及反序列化

  • 支持基于Redis的JDKCollection实现

我们在学习篇1中曾经提到过,Redis不同于MySQL,他在不同的环境下查询语句并不相同,之前操作String用set,get等,操作Hash用hset,hget等,但是在SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中:

关说不练没意义,我们继续往下看如何在项目中集成SpringDataRedis。

三、SpringDataRedis快速入门

3.1、使用SpringDataRedis

想要使用SpringDataRedis非常简单,只需要执行以下三个使用步骤:

  • 引入spring-boot-starter-data-redis依赖

    • <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>
  • 在application.yml配置Redis信息

    • server:port: 8081
      spring:redis:host: 127.0.0.1port: 6379 password: 123456 #没有则不用填lettuce:pool:max-active: 8  #最大连接max-idle: 8   #最大空闲连接min-idle: 0   #最小空闲连接max-wait: 100ms #连接等待时间
  • 注入RedisTemplate

    • @SpringBootTest
      class RedisDemoApplicationTests {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Testvoid testString() {// 写入一条String数据redisTemplate.opsForValue().set("name", "jialuosi");// 获取string数据Object name = redisTemplate.opsForValue().get("name");System.out.println(name);}
      }

3.2、序列化与反序列化

        RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的:(值就是我们存入的name的value:jialuosi)

这种序列化的方式,其缺点已经非常的明显:可读性非常差,内存占用较大。所以该如何解决呢?

  • 方案一:

    • 自定义RedisTemplate

    • 修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer

    • 缺点:为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。

  • 方案二:

    • 使用StringRedisTemplate

    • 写入Redis时,手动把对象序列化为JSON

    • 读取Redis时,手动把读取到的JSON反序列化为对象

因为种种原因,方案一也有很多的问题,所以我们之间讲解方案二、避免白雪。

3.3、StringRedisTemplate

        为了减少内存的消耗,我们可以采用手动序列化的方式,换句话说,就是不借助默认的序列化器,而是我们自己来控制序列化的动作,同时,我们只采用String的序列化器,这样,在存储value时,我们就不需要在内存中就不用多存储数据,从而节约我们的内存空间。

        这种用法比较普遍,因此SpringDataRedis就提供了RedisTemplate的子类:StringRedisTemplate,它的key和value的序列化方式默认就是String方式。

而关于如何序列化以及反序列化可以看我的这篇文章:JAVA:浅谈JSON与JSON转换icon-default.png?t=N7T8https://blog.csdn.net/jialuosi/article/details/139005572

下面是实操代码,其中实体类只赋值了ID以及名字,从   序列化为JSON数据存入Redis   到    从Redis中取出JSON然后反序列化为实体类对象   的过程。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派 Raspberry Pi M.2 HAT+ 现已发售!原理图流出!

​Raspberry Pi M.2 HAT 使您能够将 M.2 M-key 外设&#xff08;如 NVMe 驱动器和人工智能加速器&#xff09;连接到 Raspberry Pi 5。它能够提供与这些外设之间的快数据传输&#xff08;高达 500 MB/s&#xff09;&#xff0c;现在就可以从树莓派的授权经销商网络购买&#xf…

c语言:strcmp

strcmp函数是用于比较两个字符串的库函数&#xff0c;其功能是根据ASCII值逐一对两个字符串进行比较。 语法&#xff1a;strcmp(str1, str2) 返回值&#xff1a; 如果str1等于str2&#xff0c;则返回0。 如果str1小于str2&#xff0c;则返回负数&#xff08;具体值取决于C…

注意力机制篇 | MSFE:即插即用的多尺度滑窗注意力(附源码实现)

前言:Hello大家好,我是小哥谈。多尺度滑窗注意力(Multi-Scale Sliding Window Attention,MSFE)是一种用于处理图像的深度学习模型。它通过引入多尺度特征提取和滑窗注意力机制来提高图像识别的准确性。在MSFE中,模型采用多尺度卷积神经网络来提取图像的特征,然后使用滑窗…

DELPHI通过WebService进行数据交互

WebService是一种可以跨语言和平台的数据交互模式&#xff0c;使用非常广泛&#xff0c;与JSon数据格式结合&#xff0c;更是当前非常流行的一种模式&#xff0c;本章针对DELPHI通过WebService进行数据的交互做一个相对简单例子应用。 本文使用的DELPHI 版本为&#xff1a;DEL…

pdf文件怎么编辑?分享3个专业的pdf软件!

在数字化时代&#xff0c;PDF文件已成为我们工作、学习中的得力助手。然而&#xff0c;面对需要修改的PDF文件&#xff0c;许多人却感到无从下手。今天&#xff0c;就让我们一起探索如何轻松编辑PDF文件&#xff0c;并介绍几款实用的编辑软件&#xff0c;让你轻松应对各种PDF编…

OpenAI宫斗剧番外篇: “Ilya与Altman联手对抗微软大帝,扫除黑恶势力”,“余华”和“莫言”犀利点评

事情是这样的。 小编我是一个重度的智谱清言用户&#xff0c;最近智谱清言悄悄上线了一个“划词引用”功能后&#xff0c;我仿佛打开了新世界的大门。我甚至用这个小功能&#xff0c;玩出来了即将为你上映的《OpenAI宫斗剧番外篇》。 3.5研究测试&#xff1a;hujiaoai.cn 4研…

蓝牙Classic加密算法设计和实现,SAFER+,E0,E1,E2,E3(python)

概述 之前用python给大家实现了所有LE相关加密工具算法。bobwenstudy/BluetoothCryptographicToolbox: LE SMP加密算法设计和实现(python) (github.com)&#xff0c;最近重温了下Classic加密&#xff0c;顺便将Classic所有加密算法给实现了一遍。 在蓝牙Classic Spec中&#…

5.14.3 UNETR:用于 3D 医学图像分割的 Transformers

具有收缩和扩展路径的全卷积神经网络 (FCNN) 在大多数医学图像分割应用中表现出了突出的作用。在 FCNN 中&#xff0c;编码器通过学习全局和局部特征以及上下文表示来发挥不可或缺的作用&#xff0c;这些特征和上下文表示可用于解码器的语义输出预测。 在FCNN中&#xff0c;收缩…

对列表进行统计和计算

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Python的列表提供了内置的一些函数来实现统计、计算的功能。下面介绍几种常用的功能。 &#xff08;1&#xff09;获取指定元素出现的次数 使用列表…

智能车竞赛指南:从零到一,驶向自动驾驶的未来

智能车竞赛指南&#xff1a;从零到一&#xff0c;驶向自动驾驶的未来 一、智能车竞赛概览1.1 竞赛介绍1.2 竞赛分类 二、智能车开发技术基础2.1 硬件平台2.2 软件开发 三、实战案例&#xff1a;循线小车开发3.1 系统架构3.2 代码示例 四、技术项目&#xff1a;基于ROS的视觉导航…

FedSyn: Synthetic Data Generation using Federated Learning

arxiv2022,没找到是哪个刊物的,是没投中吗? 这篇是用GAN做数据生成,每个client都训练一个生成器,加噪声传到server端聚合,实验是衡量生成图片的质量。 论文地址:arxiv code:没找到 贡献 提出了提出了一种新颖的方法(FedSyn ),将联邦学习、使用 GAN的合成数据生成…

高中数学:平面向量-数量积(向量与向量的乘积)与投影

一、引题 物理上的力做功 二、数量积与投影 1、数量积 θ的范围是[0,π] 2、投影 向量的投影&#xff0c;依然是一个向量&#xff01; 3、运算法则 易错点&#xff1a; 4、重要性质 这里对性质(2)要注意一下&#xff1a;如果 a → \mathop{a}\limits ^{\rightarrow…

建模:Maya

一、常用按键 1、alt 左键 —— 环绕查看 2、alt 中键 —— 拖动模型所在面板 3、空格 —— 进入三视图模式&#xff1b;空格 左键按住拖动 —— 切换到对应视图 二、骨骼归零 1、T Pose 旋转模式&#xff0c;点击模型&#xff0c;摆好T姿势即可 2、复制模型设置200距离…

【Linux】进程信号及相关函数/系统调用的简单认识与使用

文章目录 前言一、相关函数/系统调用1. signal2. kill3. abort (库函数)4. raise (库函数)5. alarm 前言 现实生活中, 存在着诸多信号, 比如红绿灯, 上下课铃声…我们在接收到信号时, 就会做出相应的动作. 对于进程也是如此的, 进程也会收到来自 OS 发出的信号, 根据信号的不同…

[OpenGL] 法线贴图

目录 一 为什么要使用法线贴图 二 二种不同法线方式的使用 2.1 插值法线 2.1 法线贴图 本章节源码 点击此处 一 为什么要使用法线贴图 法线贴图我们可以使用更少的顶点表现出同样丰富的细节。高精度网格和使用法线贴图的低精度网格几乎区分不出来。所以法线贴图不仅看起来…

UE5中搭建一个简单的海岛

本文将用UE的WaterSystem与地形搭建一个简单的海岛&#xff0c;通过WaterSystem的参数设置&#xff0c;可以更好的自定义海岸线等效果。 1.基础风貌 1.1.首先新建一个Basic基础场景&#xff0c;切换到地形编辑模式刷出一块高地&#xff0c;用于沙滩。 1.2.引入UE官方插件Wat…

[IMX6ULL驱动开发]-Linux对中断的处理(一)

目录 中断概念的引入 ARM架构中断的流程 异常向量表 Linux系统对中断的处理 ARM对程序和中断的处理 Linux进程中断处理 中断概念的引入 如何理解中断&#xff0c;我们可以进行如下抽象。把CPU看做一个母亲&#xff0c;当它正在执行任务的时候&#xff0c;可以看为是一个母…

【BSP开发经验】简易文件系统digicapfs实现方式

文章目录 背景Linux vfs框架介绍数据结构系统调用openwriteread 总体框架 Linux 磁盘高速缓存机制标准文件访问同步文件访问异步文件访问buffer_head 如何实现一个简单的文件系统blkdevfs注册文件系统产生一个文件让文件变得可读可写 背景 在新的分区升级启动方案中需要分别实…

OGG几何内核-BRepBuilderAPI_MakeEdge学习

OGG几何内核fork自OCCT 7.7.0&#xff0c; BRepBuilderAPI_MakeEdge是几何内核的一个重要和基础的功能&#xff0c;也十分复杂&#xff0c;因为要支持line、circle、ellipse&#xff0c;parabola&#xff0c;hyperbola&#xff0c;circle&#xff0c;beziercurve&#xff0c;b…

亚马逊测评还能做吗?

只能说测评不是唯一的手段&#xff0c;但是推销量的一把好手。首先测评能让listing快速成长&#xff0c;短期内有望成为爆款&#xff0c;速度快&#xff0c;利润高&#xff0c;回款快。相对其他推广&#xff0c;测评无疑是有效&#xff0c;省培养listing的方法。其次新品前期太…