Redis学习打卡-Day1-SpringDataRedis、有状态无状态

news2025/7/19 5:42:59

Redis的Java客户端

  1. Jedis
    • 以 Redis 命令作为方法名称,学习成本低,简单实用。
    • Jedis 是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此推荐使用 Jedis 连接池代替Jedis的直连方式。
  2. lettuce
    • Lettuce是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。
  3. Redisson
    • Redisson是一个基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map、Queue、Lock、Semaphore、AtomicLong等强大功能。

SpringDataRedis

  • 定义:SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis。
  • 特点:
    • 提供了对不同 Redis 客户端的整合(Lettuce和 Jedis)。
    • 提供了 RedisTemplate 统一API来操作Redis
    • 支持Redis的发布订阅模型。
    • 支持Redis哨兵和Redis集群。
    • 支持基于Lettuce的响应式编程。
    • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化。
    • 支持基于Redis的JDKcollection实现。
RedisTemplate
  • SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中:
    RedisTemplateAPI
序列化方式
  • RedisTemplate 可以接收任意 Object 作为值写入Redis,只不过写入前会把 Obiect 序列化为字节形式,默认是采用JDK序列化,得到的结果如下,可读性差,内存占用较大。
    序列化方式
  • 可以自己定义序列化方式:
    自定义序列化方式
  • 为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中并存入Redis,会带来额外的内存开销。为了节省内存空间,我们并不会使用JSON序列化器来处理valuje,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储java对象时,手动完成对象的序列化和反序列化。Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式,省去了我们自定义RedisTemplate的过程
    StringRedisTemplate

有状态 & 无状态

  • 有状态(Stateful)和无状态(Stateless)是计算机领域中描述系统或协议是否依赖“状态信息”的核心概念,尤其在 Web 开发和 API 设计中至关重要。以下是通俗易懂的解释和对比:
有状态
  • 定义:服务器端会保存客户端的状态信息(如用户身份、临时数据),每个请求的处理需要依赖之前请求的上下文。
  • 典型场景:用户登录、购物车、多步骤表单等需要跟踪用户行为的场景。
  • 特点:
    • 依赖服务器存储:用户的状态信息(如登录状态、购物车数据)存储在服务器内存、数据库或缓存(如 Redis)中。
    • 请求关联性:客户端每次请求需携带标识(如 Session ID),服务器需通过标识查找对应的状态数据。
  • 优点:
    • 精准控制:服务端可随时修改或销毁状态(如强制用户退出)。
    • 安全性高:敏感数据(如权限)不暴露给客户端。
  • 缺点:
    • 扩展性差:集群部署时需同步状态(如 Redis 共享 Session)。
    • 资源占用:高并发时大量状态存储会增加服务器压力。
无状态
  • 定义:服务器不保存客户端的状态信息,每个请求独立且自包含(无需依赖之前的请求)。
  • 典型场景:RESTful API、微服务通信、跨域接口等分布式场景。
  • 特点:
    • 客户端携带完整信息:每次请求需附带所有必要信息(如 JWT 令牌),服务器直接解析无需查询存储。
    • 请求独立性:服务器处理请求时不依赖历史记录。
  • 优点:
    • 扩展性强:无需共享状态,天然支持分布式和横向扩展。
    • 性能高:省去了服务端查询状态的步骤。
  • 缺点:
    • 令牌管理复杂:无法直接撤销令牌(需黑名单或短有效期)。
    • 数据暴露风险:令牌内容可被解码(需避免存储敏感信息)。
通俗类比:去餐厅消费。
  • 有状态:你告诉服务员手机号(Session ID),服务员根据号码查询会员信息(服务端存储的状态,每次消费需报手机号)。
  • 无状态:你直接给服务员一张会员卡(JWT),卡里已包含身份信息、余额、有效期等信息(自包含状态,服务员无需查系统,直接读卡即可完成交易)。

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

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

相关文章

Spring Spring Boot 常用注解整理

Spring & Spring Boot 常用注解整理 先理解核心概念:什么是注解(Annotation)?第一部分:IOC(控制反转)和 DI(依赖注入)1. Component2. Service, Repository, Controll…

c#建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能

# financial_建筑行业 建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能 # 开发背景 软件是给岳阳客户定制开发一款建筑行业流水账财务软件。提供工程签证单、施工日志、人员出勤表等信息记录。 # 财务管理系统功能描述 1.可以自行设置记账科目,做凭…

让 Cursor 教我写 MCP Client

文章目录 1. 写在最前面2. 动手实现一个 MCP Client2.1 How 天气查询 Client2.1.1 向 Cursor 提问的艺术2.1.2 最终成功展示2.1.3 client 的代码 3. MCP 协议核心之一总结3.1 SSE vs WebSocket 4. 碎碎念5. 参考资料 1. 写在最前面 学习了 MCP Server 的实现后,刚好…

反射, 注解, 动态代理

文章目录 单元测试什么是单元测试咱们之前是如何进行单元测试的? 有啥问题 ?现在使用方法进行测试优点Junit单元测试的使用步骤删除不需要的jar包总结 反射认识反射、获取类什么是反射反射具体学什么?反射第一步:或者Class对象 获…

vue vite 无法热更新问题

一、在vue页面引入组件CustomEmployeesDialog,修改组件CustomEmployeesDialog无法热更新 引入方式: import CustomEmployeesDialog from ../dialog/customEmployeesDialog.vue 目录结构: 最后发现是引入import时,路径大小写与目…

深度学习中的查全率与查准率:如何实现有效权衡

📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4-turbo模型辅助生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认…

Windows玩游戏的时候,一按字符键就显示桌面

最近打赛伯朋克 2077 的时候,不小心按错键了,导致一按字符键就显示桌面。如下: 一开始我以为是输入法的问题(相信打游戏的人都知道输入法和奔跑键冲突的时候有多烦),但是后来解决半天发现并不是。在网上搜…

Gemini 2.5 Flash和Pro预览版价格以及上下文缓存的理解

Gemini 2.5 Flash和Pro预览版价格 Gemini 2.5 Flash 预览版就是 Google 的最新 AI 大模型,能处理巨量内容。可以免费体验,但有次数和功能上的限制;付费层级才开放全部高级功能。价格也比传统 API 略有不同,尤其在“思考预算”“上…

vue2 头像上传+裁剪组件封装

背景:最近在进行公司业务开发时,遇到了头像上传限制尺寸的需求,即限制为一寸证件照(宽295像素,高413像素)。 用到的第三方库: "vue-cropper": "^0.5.5" 完整组件代码&…

AI-02a5a5.神经网络-与学习相关的技巧-权重初始值

权重的初始值 在神经网络的学习中,权重的初始值特别重要。实际上,设定什么样的权重初始值,经常关系到神经网络的学习能否成功。 不要将权重初始值设为 0 权值衰减(weight decay):抑制过拟合、提高泛化能…

【springcloud学习(dalston.sr1)】Eureka单个服务端的搭建(含源代码)(三)

该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一) 这篇文章主要介绍单个eureka服务端的集群环境是如何搭建的。 通过前面的文章【springcloud学习(dalston.sr1)】…

Node.js数据抓取技术实战示例

Node.js常用的库有哪些呢?比如axios或者node-fetch用来发送HTTP请求,cheerio用来解析HTML,如果是动态网页的话可能需要puppeteer这样的无头浏览器。这些工具的组合应该能满足大部分需求。 然后,可能遇到的难点在哪里?…

windows10 安装 QT

本地环境有个qt文件,这里是5.14.2 打开一个cmd窗口并指定到该文件根目录下 .\qt-opensource-windows-x86-5.14.2.exe --mirror https://mirrors.ustc.edu.cn/qtproject 执行上面命令 记住是文件名,记住不要傻 X的直接复制,是你的文件名 点击…

WordPress 和 GPL – 您需要了解的一切

如果您使用 WordPress,GPL 对您来说应该很重要,您也应该了解它。查看有关 WordPress 和 GPL 的最全面指南。 您可能听说过 GPL(通常被称为 WordPress 的权利法案),但很可能并不完全了解它。这是有道理的–这是一个复杂…

C++书本摆放 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析

目录 C++书本摆放 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、 推荐资料 1、C++资料 2、Scratch资料 3、Python资料 C++书本摆放 2024年信息素养大赛 C++复赛真题 一、题目要求 1、编程实现 中科智慧科技…

RabbitMQ 核心概念与消息模型深度解析(一)

一、RabbitMQ 是什么 在当今分布式系统盛行的时代,消息队列作为一种至关重要的中间件技术,扮演着实现系统之间异步通信、解耦和削峰填谷等关键角色 。RabbitMQ 便是消息队列领域中的佼佼者,是一个开源的消息代理和队列服务器,基于…

论文阅读笔记——双流网络

双流网络论文 视频相比图像包含更多信息:运动信息、时序信息、背景信息等等。 原先处理视频的方法: CNN LSTM:CNN 抽取关键特征,LSTM 做时序逻辑;抽取视频中关键 K 帧输入 CNN 得到图片特征,再输入 LSTM&…

LabVIEW在电子电工教学中的应用

在电子电工教学领域,传统教学模式面临诸多挑战,如实验设备数量有限、实验过程存在安全隐患、教学内容更新滞后等。LabVIEW 作为一款功能强大的图形化编程软件,为解决这些问题提供了创新思路,在电子电工教学的多个关键环节发挥着重…

Vue3 怎么在ElMessage消息提示组件中添加自定义icon图标

1、定义icon组件代码&#xff1a; <template><svg :class"svgClass" aria-hidden"true"><use :xlink:href"iconName" :fill"color"/></svg> </template><script> export default defineComponen…

生活破破烂烂,AI 缝缝补补(附提示词)

写在前面&#xff1a;​【Fire 计算器】已上线&#xff0c;快算算财富自由要多少​ 现实不总温柔&#xff0c;愿你始终自渡。 请永远拯救自己于水火之中。 毛绒风格提示词&#xff08;供参考&#xff09;&#xff1a; 1. 逼真毛绒风 Transform this image into a hyperrealist…