【Spring连载】使用Spring Data访问Redis(十一)----Redis事务 Transactions

【Spring连载】使用Spring Data访问Redis(十一)----Redis事务 Transactions

  • @Transactional 支持

Redis通过multi, exec 和 discard命令为事务提供支持。RedisTemplate上提供了这些操作。但是,RedisTemplate不能保证使用相同的连接运行事务中的所有操作。
Spring Data Redis提供了SessionCallback接口,以便在需要使用同一连接执行多个操作时使用,例如在使用Redis事务时。以下示例使用multi方法:

//execute a transaction
List<Object> txResults = redisOperations.execute(new SessionCallback<List<Object>>() {public List<Object> execute(RedisOperations operations) throws DataAccessException {operations.multi();operations.opsForSet().add("key", "value1");// This will contain the results of all operations in the transactionreturn operations.exec();}
});
System.out.println("Number of items added to set: " + txResults.get(0));

RedisTemplate使用它的value、hash key和hash value序列化器在返回之前对exec的所有结果进行反序列化。还有一个额外的exec方法,它允许你为事务结果传递自定义序列化器。

@Transactional 支持

默认情况下,RedisTemplate不参与Spring事务。如果你希望RedisTemplate在使用@Transactional或TransactionTemplate时使用Redis事务,则需要通过设置setEnableTransactionSupport(true)来显式启用对每个RedisTemplate的事务支持。启用事务支持将RedisConnection绑定到ThreadLocal支持的当前事务。如果事务完成时没有出现错误,Redis事务将使用EXEC提交,否则将使用DISCARD回滚。Redis事务是面向批(batch-oriented)的。在正在进行的事务期间发出的命令将排队,并且仅在提交事务时应用。
Spring Data Redis区分正在进行的事务中的只读命令和写入命令。只读命令,如KEYS,通过管道传输到新的(非线程绑定的)RedisConnection以允许读取。写入命令由RedisTemplate排队,并在提交时应用。
以下示例显示了如何配置事务管理:
例1: 启用事务管理的配置

@Configuration
@EnableTransactionManagement   --------1                      
public class RedisTxContextConfiguration {@Beanpublic StringRedisTemplate redisTemplate() {StringRedisTemplate template = new StringRedisTemplate(redisConnectionFactory());// explicitly enable transaction supporttemplate.setEnableTransactionSupport(true);   --------2           return template;}@Beanpublic RedisConnectionFactory redisConnectionFactory() {// jedis || Lettuce}@Beanpublic PlatformTransactionManager transactionManager() throws SQLException {return new DataSourceTransactionManager(dataSource());   ---------3}@Beanpublic DataSource dataSource() throws SQLException {// ...}
}
1. 配置Spring上下文以启用声明性事务管理。
2.RedisTemplate配置为通过将连接绑定到当前线程来参与事务。
3. 事务管理需要PlatformTransactionManagerSpring Data Redis未附带PlatformTransactionManager实现。假设你的应用程序使用JDBCSpring Data Redis可以通过使用现有的事务管理器来参与事务。

下面的例子分别演示了一个用法约束:
例2: 使用约束

// must be performed on thread-bound connection
template.opsForValue().set("thing1", "thing2");// read operation must be run on a free (not transaction-aware) connection
template.keys("*");// returns null as values set within a transaction are not visible
template.opsForValue().get("thing1");

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

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

相关文章

C#上位机与三菱PLC的通信02--MC协议介绍

1、协议介绍 三菱 PLC MC 协议是一种用于三菱 PLC 与上位机之间进行数据通信的协议&#xff0c;也称为 Mitsubishi Communication Protocol。该协议支持串口、以太网等多种通讯方式&#xff0c;可实现实时数据的采集和交换。三菱PLC的MC协议是一种数据通信协议&#xff0c;它用…

Bootstrap5 响应式导航栏

Bootstrap5 响应式导航栏 我们可以使用 Bootstrap5 导航栏组件为网站或应用程序创建响应式导航标题。 这些响应式导航栏在手机等小视口的设备上会折叠&#xff0c;但当用户单击切换按钮时会展开。 但是&#xff0c;它在中型和大型设备&#xff08;例如笔记本电脑或台式机&#…

考研数据结构笔记(4)

链表&#xff08;链式存储&#xff09; 单链表定义基本操作的实现单链表的插入按位序插入指定节点的前插指定节点的后插 单链表的删除 小结 单链表 定义 顺序表优点:可随机存取&#xff0c;存储密度高&#xff0c;缺点:要求大片连续空间&#xff0c;改变容量不方便。 单链表优…

中科星图——如何利用中科星图智脑引擎来下载0.5米分辨率的高清遥感影像

简介 如何利用中科星图智脑引擎来下载0.5米分辨率的高清遥感影像,这里我们一旦您有GEE的基础那么还是非常好的接入到这个平台当中的,所以这里我们依旧是使用的JavaScript语言来进行编程,地球计算器-地球编程 (geovisearth.com) 这里有一个好处是这里的函数我们可以直接悬浮…

1898_野火FreeRTOS教程阅读笔记_链表操作

1898_野火FreeRTOS教程阅读笔记_链表操作 全部学习汇总&#xff1a; g_FreeRTOS: FreeRTOS学习笔记 (gitee.com) 新的节点的插入&#xff0c;影响到的是链表中最后一个元素的后继以及当前被插入元素的前驱、后继以及归属属性。具体的操作效果为&#xff1a;新的节点更新自己的前…

请解释Java中的设计模式,并举例说明一个常用的设计模式

请解释Java中的设计模式&#xff0c;并举例说明一个常用的设计模式 在Java中&#xff0c;设计模式是一种被广泛采用的解决特定问题的可复用方案。设计模式提供了一套经过验证的解决方案&#xff0c;可以帮助开发人员解决常见的软件设计问题&#xff0c;提高代码的可维护性、可…

2 月 7 日算法练习- 数据结构-树状数组

树状数组 lowbit 在学习树状数组之前&#xff0c;我们需要了解lowbit操作&#xff0c;这是一种位运算操作&#xff0c;用于计算出数字的二进制表达中的最低位的1以及后面所有的0。 写法很简单&#xff1a; int lowbit&#xff08;int x&#xff09;&#xff5b;return x &am…

51单片机精进之路-1点亮led灯

本例中led灯使用共阳极连接在电路中&#xff0c;共阳极即将led的正极接在一起&#xff0c;通过上拉电阻接到电源正极&#xff0c;通过单片机io与Led的负极相连&#xff0c;io输出低电平&#xff0c;有电流从led流过&#xff0c;此时led点亮&#xff0c;当io输出高电平时&#x…

leetcode-206-翻转链表

对于链表来说&#xff0c;->next就是代表图上的那个箭头&#xff0c;指向后&#xff0c;就相当于已经建立完链接&#xff0c;就可以改变只想节点的指针的位置了 每一个指针&#xff0c;则是代表一个圈 一 解题 方法一&#xff1a;迭代 假设链表为 1→2→3→∅1 \rightar…

2024.02.08

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);this->setWindowIcon(QIcon(":/zh.png"));ui->lineEdit->setPlaceholderText("账号/手…

VSCode 文件夹增加右键打开

按照以下步骤操作即可 按下Win R组合键输入"regedit"并按回车&#xff0c;打开注册表编辑器。在注册表编辑器的左侧找到&#xff1a;计算机\HKEY_CLASSES_ROOT\Directory\shell这个路径&#xff0c;在shell下右键新建>项&#xff0c;将其命名为"VSCode&quo…

WordPress Plugin HTML5 Video Player SQL注入漏洞复现(CVE-2024-1061)

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 0x02 漏洞概述 WordPress Plugin HTML5 Video Player 插件 get_v…

Python进阶--爬取美女图片壁纸(基于回车桌面网的爬虫程序)

目录 一、前言 二、爬取下载美女图片 1、抓包分析 a、分析页面 b、明确需求 c、抓包搜寻 d、总结特点 2、编写爬虫代码 a、获取图片页网页源代码 b、提取所有图片的链接和标题 c、下载并保存这组图片 d、 爬取目录页的各种类型美女图片的链接 e、实现翻页 三、各…

ZooKeeper安装及配置(Windows版)

步骤&#xff1a; 1.官网下载二进制版本ZooKeeper安装包。 2.解压到你要安装的目录下 3.配置 3.1进入目录 D:\Install\apache-zookeeper-3.9.1-bin 新增两个文件夹&#xff1a;data和log 3.2 进入目录D:\Install\apache-zookeeper-3.9.1-bin\conf 复制zoo_sample.cfg文件&a…

可选链语法?.

可选链运算符&#xff08;?.&#xff09;允许读取位于连接对象链深处的属性的值&#xff0c;而不必明确验证链中的每个引用是否有效。?. 运算符的功能类似于 . 链式运算符&#xff0c;不同之处在于&#xff0c;在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起…

手把手教你开发Python桌面应用-PyQt6图书管理系统-主窗体点击菜单显示功能窗体实现

锋哥原创的PyQt6图书管理系统视频教程&#xff1a; PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…

【人工智能】人工智能 – 引领未来科技的潮流

写在前面 引言红利挑战结论 引言 人工智能是指使计算机系统表现出类似于人类智能的能力。其目标是实现机器具备感知、理解、学习、推理和决策等智能行为。人工智能的发展可以追溯到上世纪50年代&#xff0c;随着计算机技术和算法的不断进步&#xff0c;人工智能得以实现。 今天…

visual studio code could not establish connection to *: XHR failed

vscode远程连接服务器时&#xff0c;输入密码&#xff0c;又重新提示输入密码&#xff0c;就这样循环了好几次&#xff0c;然后会报上述的错误。由于我是window系统&#xff0c;我用cmd&#xff0c;然后ssh */你的IP地址/*发现可以远程到服务器上&#xff0c;但是通过Vscode就不…

向量搜索查询faiss、annoy

首先介绍annoy : 转发空间&#xff1a;https://download.csdn.net/blog/column/10872374/114665212 Annoy是高维空间求近似最近邻的一个开源库。 Annoy构建一棵二叉树&#xff0c;查询时间为O(logn)。 Annoy通过随机挑选两个点&#xff0c;并使用垂直于这个点的等距离超平面…

ROS学习笔记15:动态参数

前言 本人ROS小白&#xff0c;利用寒假时间学习ROS&#xff0c;在此以笔记的方式记录自己每天的学习过程。争取写满20篇(15/20)。 环境&#xff1a;Ubuntu20.04、ROS1&#xff1a;noetic 环境配置&#xff1a;严格按照下方学习链接的教程配置&#xff0c;基本一次成功。 学习链…