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

【Spring连载】使用Spring Data访问Redis(四)----RedisTemplate

【Spring连载】使用Spring Data访问Redis(四)----RedisTemplate通过RedisTemplate处理对象Working with Objects through RedisTemplate

  • 一、专注String的便利类
  • 二、Serializers

大多数用户可能使用RedisTemplate及其相应的包org.springframework.data.redis.core或其reactive变体ReactiveRedisTemplate。由于其丰富的功能集,该template实际上是Redis模块的中心类。template为Redis交互提供了高级抽象。虽然[Reactive]RedisConnection提供了接受和返回二进制值(byte数组)的low-level方法,但template负责序列化和连接管理,使用户无需处理这些细节。
RedisTemplate类实现了RedisOperations接口,其reactive变体ReactiveRedisTemplate实现了ReactiveRedisOperations。
引用[Reactive]RedisTemplate实例上的操作的首选方式是通过[Reactive]RedisOperations接口。
此外,template提供了操作视图(遵循Redis命令参考中的分组),这些视图提供了丰富的通用接口,用于(通过KeyBound接口)对特定类型或特定key进行操作,如下表所示:
操作视图:

接口描述
Key Type 操作
GeoOperationsRedis geospatial 操作, 例如 GEOADD, GEORADIUS,…​
HashOperationsRedis hash 操作
HyperLogLogOperationsRedis HyperLogLog 操作, 例如 PFADD, PFCOUNT,…​
ListOperationsRedis list 操作
SetOperationsRedis set操作
ValueOperationsRedis string (或 value)操作
ZSetOperationsRedis zset (或 sorted set)操作
Key Bound 操作
BoundGeoOperationsRedis key bound geospatial操作
BoundHashOperationsRedis hash key bound操作
BoundKeyOperationsRedis key bound操作
BoundListOperationsRedis list key bound操作
BoundSetOperationsRedis set key bound操作
BoundValueOperationsRedis string (或 value) key bound操作
BoundZSetOperationsRedis zset (或 sorted set) key bound操作

配置后,template是线程安全的,可以在多个实例中重复使用。
RedisTemplate的大部分操作都使用基于Java的序列化程序。这意味着template写或读的任何对象都通过Java进行序列化和反序列化。
你可以更改template上的序列化机制,Redis模块提供了几个实现,这些实现在org.springframework.data.redis.serializer包中提供。有关详细信息,请参阅序列化程序。你还可以将任何序列化程序设置为null,并通过将enableDefaultSerializer属性设置为false让RedisTemplate使用原始字节数组(raw byte arrays)。请注意,template要求所有键都为非null。但是,只要底层序列化程序接受null值,它们就可以为null。有关更多信息,请阅读每个序列化程序的Javadoc。
对于需要某个template视图的情况,请将该视图声明为依赖项并注入template。容器自动执行转换,消除opsFor[X]调用,如以下示例所示:
配置 Template API

@Configuration
class MyConfig {@BeanLettuceConnectionFactory connectionFactory() {return new LettuceConnectionFactory();}@BeanRedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, String> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);return template;}
}

使用RedisTemplate将一个元素推送到List中

public class Example {// inject the actual operations@Autowiredprivate RedisOperations<String, String> operations;// inject the template as ListOperations@Resource(name="redisTemplate")private ListOperations<String, String> listOps;public void addLink(String userId, URL url) {listOps.leftPush(userId, url.toExternalForm());}
}

一、专注String的便利类

由于Redis中存储的键和值通常是java.lang.String,Redis模块为RedisConnection和RedisTemplate提供了两个扩展,分别是StringRedisConnection(及其DefaultStringRedisConnection实现)和StringRedisTemplate,作为密集String操作的一站式解决方案。除了绑定到String键之外,template和连接还使用了StringRedisSerializer,这意味着存储的键和值是可读的(假设Redis和代码中使用相同的编码)。以下列表显示了一个示例:

@Configuration
class RedisConfiguration {@BeanLettuceConnectionFactory redisConnectionFactory() {return new LettuceConnectionFactory();}@BeanStringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}
}
public class Example {@Autowiredprivate StringRedisTemplate redisTemplate;public void addLink(String userId, URL url) {redisTemplate.opsForList().leftPush(userId, url.toExternalForm());}
}

与其他Spring模板一样,RedisTemplate和StringRedisTemplate可以通过RedisCallback接口直接与Redis对话。此功能可以给你完全的控制,因为它可以直接与RedisConnection对话。请注意,当使用StringRedisTemplate时,回调将接收StringRedisConnection的实例。下面的例子展示了如何使用RedisCallback接口:

public void useCallback() {redisOperations.execute(new RedisCallback<Object>() {public Object doInRedis(RedisConnection connection) throws DataAccessException {Long size = connection.dbSize();// Can cast to StringRedisConnection if using a StringRedisTemplate((StringRedisConnection)connection).set("key", "value");}});
}

二、Serializers

从框架的角度来看,Redis中存储的数据只有字节。虽然Redis本身支持各种类型,但在大多数情况下,这些类型指的是数据的存储方式,而不是它所代表的内容。由用户决定是将信息转换为字符串还是任何其他对象。
在Spring Data中,用户(自定义)类型和原始数据之间的转换由Spring Data Redis中的org.springframework.data.redis.serializer包处理。
此包包含两种类型的序列化程序,顾名思义,它们负责序列化过程:

  • 基于RedisSerializer的双向序列化程序。
  • 使用RedisElementReader和RedisElementWriter的元素读取器和写入器。

这些变体之间的主要区别在于RedisSerializer主要序列化到byte[],而读写器使用ByteBuffer。
有多种实现(包括本文档中已经提到的两种):

  • JdkSerializationRedisSerializer,默认用于RedisCache和RedisTemplate。
  • StringRedisSerializer。

但是,可以通过Spring OXM支持使用OxmSerializer进行Object/XML映射,或者使用Jackson2JsonRedisSerializer或GenericJackson2JsonRedisSerializer以JSON格式存储数据。
请注意,存储格式不仅限于值。它可以用于键、值或哈希,没有任何限制。

默认情况下,RedisCache和RedisTemplate被配置为使用Java native序列化。众所周知,Java native序列化允许运行由payloads引起的远程代码,这些payloads利用易受攻击的库和类注入未经验证的字节码。操作输入可能导致在反序列化步骤期间在应用程序中运行不需要的代码。因此,不要在不受信任的环境中使用序列化。通常,强烈建议你使用其他消息格式(如JSON)。
如果你担心Java序列化导致的安全漏洞,请考虑核心JVM级别的通用序列化筛选器机制:

  • 筛选传入的序列化数据。
  • JEP 290。
  • OWASP:不可信数据的反序列化。

相关文章:

【Spring连载】使用Spring Data访问Redis(四)----RedisTemplate

【Spring连载】使用Spring Data访问Redis&#xff08;四&#xff09;----RedisTemplate通过RedisTemplate处理对象Working with Objects through RedisTemplate 一、专注String的便利类二、Serializers 大多数用户可能使用RedisTemplate及其相应的包org.springframework.data.r…...

WriteFlow写作流GPT应用,激发创意的写作助手

写作是一项充满挑战的任务&#xff0c;有时我们会遇到写作灵感枯竭、思路混乱、语言表达困难等问题。为了帮助人们克服这些困难&#xff0c;我创建了一个名为WriteFlow的写作工具&#xff0c;它是一个基于GPT技术的智能助手&#xff0c;旨在激发创意&#xff0c;提供Prompt提示…...

matlab对负数开立方根得到虚数的解决方案

问题描述&#xff1a;在matlab中&#xff0c;对负数开立方根&#xff0c;不出意外你将得到虚数。 例如 − 27 3 \sqrt[3]{-27} 3−27 ​&#xff0c;我们知道其实数解是-3&#xff0c;但在matlab中的计算结果如下&#xff1a; 问题原因&#xff1a;matlab中的立方根运算是在…...

NFTScan 与 OneID 达成合作伙伴,支持多类型 DID 搜索!

近日&#xff0c;NFT 数据基础设施 NFTScan 与一体化数字身份解决方案 OneID 达成合作伙伴关系&#xff0c;双方将在 NFT 数据层面展开合作。为 Web3 用户带来优质的 NFT 搜索查询交互体验&#xff0c;向更安全和更有效的去中心化生态系统迈出的重要一步。 NFTScan 浏览器现已支…...

c# textbox 提示文字

1. 定义提示文字内容 private readonly string RemarkText "最多输入100字"; // 提示文字 2. 添加textbox 焦点事件&#xff0c; 初始化textbox提示文字和字体颜色 public UserControl(){InitializeComponent();tb_Remark.Text RemarkText;tb_Remark.ForeColor…...

Springfox Swagger3从入门案例

首先&#xff0c;在pom.xml中添加依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>io…...

HarmonyOS NEXT 星河版项目案例

参考代码&#xff1a;HeimaHealthy: 鸿蒙项目案例练习 (gitee.com) 1.欢迎页面 Entry Component struct WelcomePage {State message: string Hello Worldbuild() {Column({space: 10}) {Row() {// 1.中央slogonImage($r(app.media.home_slogan)).width(260)}.layoutWeight(…...

房屋租赁系统-java

思维导图&#xff1a;业务逻辑 类的存放&#xff1a; 工具类 Utility package study.houserent.util; import java.util.*; /***/ public class Utility {//静态属性。。。private static Scanner scanner new Scanner(System.in);/*** 功能&#xff1a;读取键盘输入的一个菜单…...

docker环境搭建及其安装常用软件

centos安装docker Install Docker Engine on CentOS | Docker Docs 下载docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io…...

【Spring连载】使用Spring Data访问Redis(三)----连接模式

【Spring连载】使用Spring Data访问Redis&#xff08;三&#xff09;----连接模式Connection Modes 一、Redis Standalone二、向Master写入&#xff0c;从Replica读取三、Redis Sentinel四、Redis Cluster Redis可以在各种设置中运行。每种操作模式都需要特定的配置&#xff0c…...

ppt背景图片怎么设置?让你的演示更加出彩!

PowerPoint是一款广泛应用于演示文稿制作的软件&#xff0c;而背景图片是演示文稿中不可或缺的一部分。一个好的背景图片能够提升演示文稿的整体效果&#xff0c;使观众更加关注你的演示内容。可是ppt背景图片怎么设置呢&#xff1f;本文将介绍ppt背景图片设置的三个方法&#…...

SQL 关键字参考手册(一)

目录 SQL 关键字 SQL ADD 关键字 ADD SQL ADD CONSTRAINT 关键字 ADD CONSTRAINT SQL ALTER 关键字 ALTER TABLE ALTER COLUMN SQL ALTER COLUMN 关键字 ALTER COLUMN SQL ALTER TABLE 关键字 ALTER TABLE SQL ALL 关键字 ALL SQL AND 关键字 AND SQL ANY 关键…...

快速排序|超详细讲解|入门深入学习排序算法

快速排序介绍 快速排序(Quick Sort)使用分治法策略。 它的基本思想是&#xff1a;选择一个基准数&#xff0c;通过一趟排序将要排序的数据分割成独立的两部分&#xff1b;其中一部分的所有数据都比另外一部分的所有数据都要小。然后&#xff0c;再按此方法对这两部分数据分别进…...

指针+一维整型数组的基本运用 和 指针+一维整型数组的初步学习

一&#xff0c;调式程序的技巧&#xff1a; 1.明确问题 2.定位问题 3.加打印&#xff08;打印核心数据0&#xff09; 二&#xff0c;指针的回顾 1.指针的概念&#xff1a;指针就是地址&#xff08;内存单元的编号&#xff09;&#xff0c;是一个数据类型&#xff08;指针类型…...

APP测试基本流程以及APP测试要点总结

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 APP测试实际上依然属于软件测试的范畴&#xff0c;是软件测试的一个真子集&#xff0c;所以经典软…...

GPT-4 Vision调试任何应用,即使缺少文本日志 升级Streamlit七

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二翻译: GPT-4 Vision静态图表转换为动态数据可视化 升级Streamlit 三翻译: GPT-4 Vision从图像转换为完全可编辑的表格 升级St…...

ppt形状导入draw.io

draw.io里面的形状还是有点少&#xff0c;我有时想找一个形状&#xff0c;发现PPT里有&#xff0c;但draw.io里有&#xff0c;比如 也就是这个形状 最简单的想法就是我直接把这个形状在PPT里存成图片&#xff08;png)&#xff0c;然后再导入到draw.io里&#xff0c;但是结果是…...

GoLang和GoLand的安装和配置

1. GoLang 1.1 特点介绍 Go 语言保证了既能达到静态编译语言的安全和性能&#xff0c;又达到了动态语言开发维护的高效率&#xff0c;使用一个表达式来形容 Go 语言&#xff1a;Go C Python , 说明 Go 语言既有 C 静态语言程序的运行速度&#xff0c;又能达到 Python 动态语…...

BGAD文章复现笔记-1

文章名&#xff1a;《Explicit Boundary Guided Semi-Push-Pull Contrastive Learning for Supervised Anomaly Detection》 原作者代码&#xff1a;https://github.com/xcyao00/BGAD 复现过程&#xff1a; 系统Ubuntu22.04, PyTorch1.12.1&#xff0c;python3.9 下载原作者…...

【EI会议推荐】第六届下一代数据驱动网络国际学术会议(NGDN 2024)

第六届下一代数据驱动网络国际学术会议&#xff08;NGDN 2024&#xff09; The Sixth International Conference on Next Generation Data-driven Networks 2024年4月26-28日 | 中国沈阳 *NGDN 2024已进入中国学术会议在线推荐列表&#xff1a;Click 基于前几届在英国埃克塞…...

拯救B站缓存视频:3分钟学会m4s转mp4的终极方案

拯救B站缓存视频&#xff1a;3分钟学会m4s转mp4的终极方案 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾在B站缓存了珍贵的视频内容&a…...

【ChatGPT脑筋急转弯生成实战指南】:20年AI工程师亲授5大提示工程心法,3步产出高智商、零冷场的原创谜题

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT脑筋急转弯生成实战导论 脑筋急转弯作为语言智能的微型压力测试场&#xff0c;天然契合大语言模型的语义推理、歧义识别与幽默生成能力。本章聚焦于利用 ChatGPT&#xff08;以 OpenAI API v1 接…...

终极免费指南:Wand-Enhancer解锁WeMod完整功能体验

终极免费指南&#xff1a;Wand-Enhancer解锁WeMod完整功能体验 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 你是否厌倦了WeMod专业版的高昂费用&…...

健身党福音:用YOLOv7+Python做个食物卡路里识别App(附完整源码和数据集)

从零打造智能饮食助手&#xff1a;YOLOv7与Python的卡路里识别实践每次站在自助餐厅琳琅满目的食物前&#xff0c;健身爱好者们都会面临一个灵魂拷问&#xff1a;这盘食物的热量到底有多少&#xff1f;传统的手动查询不仅效率低下&#xff0c;还经常因为分量估算不准导致热量计…...

光栅图像的核心特性:揭秘那个“放大就糊“的视觉之谜

一、一个让我"开窍"的乐高积木故事 我有个朋友是乐高玩家&#xff0c;他给我讲过一个让我至今难忘的故事。他说他用乐高拼了一幅蒙娜丽莎的画像——用几千块标准乐高颗粒&#xff0c;按特定的颜色和位置摆放&#xff0c;远远看去真的有蒙娜丽莎那神秘微笑的轮廓。 他…...

在多轮对话应用中感受Taotoken提供的高稳定性与低延迟

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在多轮对话应用中感受Taotoken提供的高稳定性与低延迟 开发一个需要维持上下文的多轮对话应用&#xff0c;对后端服务的稳定性和响…...

Postman 401错误排查:Bearer Token认证填法与工程化实践

1. 为什么Postman里总在401门口“卡住”——这不是权限问题&#xff0c;是认证链断了 你点下Send&#xff0c;Postman立刻甩出一个冷冰冰的 401 Unauthorized &#xff0c;连响应体都懒得给你多写一行。你翻文档、查接口说明、确认账号密码没错&#xff0c;甚至把token复制粘…...

智慧树刷课插件:3分钟搞定网课,解放你的宝贵时间![特殊字符]

智慧树刷课插件&#xff1a;3分钟搞定网课&#xff0c;解放你的宝贵时间&#xff01;&#x1f680; 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台的…...

弦图与范畴论:统一混合量子-经典机器学习的形式化框架

1. 项目概述与核心价值如果你正在关注量子计算与机器学习的交叉领域&#xff0c;尤其是那些被称为“混合量子-经典”的算法&#xff0c;你可能会发现一个有趣的现象&#xff1a;相关的论文和代码库常常在两种截然不同的“语言”之间切换。一边是描述量子线路的狄拉克符号、酉矩…...

分子动力学降维:空间学习技术从构型数据中提取慢变量

1. 项目概述&#xff1a;从“看热闹”到“看门道”的动力学降维在分子动力学模拟的世界里&#xff0c;我们常常面对一个令人头疼的“维度诅咒”。想象一下&#xff0c;你要研究一个蛋白质如何从一条松散的链折叠成具有特定功能的精密三维结构。这个系统可能包含成千上万个原子&…...