Redis事务

舵机PWM信号转互斥继电器开关信号 -----------------本文由“麦粒电子”撰写,并提供相应产品服务。---------------- 叙述 上次的PWM转继电器开关方案得到大家的不少好评(博客链接),但是发现有些玩家需要一路PWM同时去控制两路继电器开关通断,并且两者是互斥的,好去控制两种不同的负载。所以就继续升级了如下的模块。 正常的控制部件顺序这样:遥控器按钮拨动,遥控器接收机相应通道PWM值变化,PWM转开关模块检测PWM值发生变化从而驱动相应机械继电器触点吸合释放。本模块的两个继电器动作是互斥的,也就是不会同时吸合。 阅读详情



什么是redis事务

Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令,当调用了EXEC命令将执行所有命令。
Redis中,单条命令是原子性执行的,但Redis事务不保证原子性,且没有回滚。事务中任意命令执行失败,其余的命令仍会被执行。

Redis事务常用方法、

multi():开启事务
watch(String... keys):监听key是否被修改,如果在执行exec()前被修改则取消事务
unwatch():取消监听
exec():将事务需要执行的命令发送给Redis执行,并返回结果。返回结果是一个按命令执行顺序返回的list,
discard():取消事务

注意:Redis事务和管道一样,都是异步模式。在事务开启未执行前无法获取到查询操作的结果,必须等待执行exec()后才能获取到结果

小知识点 junit中的@Before、@After注解

@Before:被@After修饰的方法在@Test方法执行前执行

@After:被@After修饰的方法在@Test方法执行后执行

demo测试

测试时的公共方法和Jedis对象

static final Jedis jedis = RedisSimplePool.getJedis();
/**
 * 清空数据库
 */
@Before
public void flushdb() {
	jedis.select(0); //切换数据库
	System.out.println("清空数据库");
	jedis.flushDB();
}

/**
 * 
 * @描述:返还连接
 * @作者:严磊
 * @时间:2020年6月17日 下午10:27:02
 */
@After
public void closeConn() {
	RedisSimplePool.returnJedis(jedis);
}

1、开启事务并提交

/**
 * 
 * @描述:测试开启事务并提交
 * @作者:严磊
 * @时间:2020年6月17日 下午9:10:33
 */
@Test
public void commitTest() {
	
	// 开启事务
	Transaction transaction = jedis.multi();
	
	transaction.set("key-1", "value-1");
	transaction.set("key-2", "value-2");
	transaction.set("key-3", "value-3");
	transaction.set("key-4", "value-4");
	
	// 提交事务
	transaction.exec();
	
	System.out.println(jedis.keys("*"));
}


执行结果:
在transaction.exec();处加入断点。
执行exec方法前,数据库没有数据。
执行exec方法后,数据库插入了4个key。
在这里插入图片描述


2、开启事务然后主动放弃事务

/**
 * 
 * @描述:测试开启事务然后主动放弃事务
 * @作者:严磊
 * @时间:2020年6月17日 下午9:11:30
 */
@Test
public void discardTest() {
	
	// 开启事务
	Transaction transaction = jedis.multi();
	
	transaction.set("key-1", "value-1");
	transaction.set("key-2", "value-2");
	transaction.set("key-3", "value-3");
	transaction.set("key-4", "value-4");
	
	// 放弃事务
	transaction.discard();
	
	System.out.println(jedis.keys("*"));
}


3、使用watch监听指定的键是否被修改,如果在执行exec前被修改则取消事务

/**
 * 
 * @描述:watch 命令会标记一个或多个键,如果事务中被标记的键,在提交事务之前被修改了,那么提交事务,事务就会失败。
 * @作者:严磊
 * @时间:2020年6月17日 下午9:12:25
 * @throws InterruptedException
 */
@Test
public void watchTest() throws InterruptedException {
	//boolean resultValue = transMethod(200);
	boolean resultValue = transMethod(10);
	System.out.println("交易结果(事务执行结果):" + resultValue);
	
	int balance = Integer.parseInt(jedis.get("balance"));
	int debt = Integer.parseInt(jedis.get("expense"));
	
	System.out.printf("balance: %d, expense: %d\n", balance, debt);
}

// 支付操作
public static boolean transMethod(int amtToSubtract) throws InterruptedException {
	int balance;  // 余额
	int expense;  // 已消费额
	
	jedis.set("balance", "100");
	jedis.set("expense", "0");
	
	jedis.watch("balance", "expense");
	
	balance = Integer.parseInt(jedis.get("balance"));
	
	// 余额不足
	if (balance < amtToSubtract) {
		jedis.unwatch();  // 放弃所有被监控的键
		System.out.println("余额不足");
		return false;
	}
	
	Transaction transaction = jedis.multi();
	// 扣钱
	transaction.decrBy("balance", amtToSubtract);
	Thread.sleep(15000);  // 在外部修改 balance 或者 expense
	transaction.incrBy("expense", amtToSubtract);
	
	// list为空说明事务执行失败
	List<Object> list = transaction.exec();
	
	if(list==null)
	{
		return false;
	}
	else
	{
		list.forEach(System.out::println);
		return true;
	}
}

执行结果:
如果在事务执行exec方法前,对key balance或expense进行了修改,exec()方法会返回null。事务中的命令都不会执行。

【软考中级网络工程师】知识点之 IP QoS 技术 本文围绕软考中级网络工程师必备的 IP QoS 技术展开,系统阐述其核心知识。首先解析 IP QoS 的定义、重要性及应用场景,揭示其在视频会议、在线游戏等场景的关键作用;接着深入讲解技术原理,包括流量分类与标记、整形与限速、拥塞管理及 RSVP 协议;随后对比尽力而为、IntServ、DiffServ 三种服务模型的特点;还介绍了配置实践与案例分析,探讨其与 SDN、5G 等技术的融合趋势。旨在帮助读者全面掌握 IP QoS 技术要点,为网络规划与优化提供理论与实践指导。 阅读详情

相关推荐

CMOS反相器版图设计全解析:PMOS/NMOS布局与VDD/VSS连接门道

版图设计是芯片从电路原理图迈向物理实现的必经桥梁,而CMOS反相器作为最基础的数字单元,恰好是理解这一过程的最佳切入点。在版图绘制中,PMOS与NMOS因导电类型和迁移率差异,需要在N阱与P衬底上分别规划,并呈现出不同的有源区尺寸。真正决定版图好坏的关键,往往在于VDD/VSS的完整连接——不仅要接通源漏,还要通过阱接触和衬底接触固定阱与衬底电位,防止寄生PN结正偏和闩锁效应。合理布局电源地线轨道、优化接触孔数量,能显著降低寄生电阻与电迁移风险。这些原理不仅适用于反相器,也是所有CMOS数字标准单元版图设计

weixin_29159441的博客 302

Jedis源码解析(Transation事务)

1 Redis Client中Transaction如何实现Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行。Redis事务的实现需要用到 MULTI 和 EXEC 两个命令,事务开始的时候先向Redis服务器发送 MULTI 命令,然后依次发送需要在本次事务中处理的命令,最后再发送 EXEC 命令表示

Kevin.yang专栏 1479

PPO算法详解:基于CartPole-v1的强化学习实现

PPO算法详解:基于CartPole-v1的强化学习实现

m0_54720701的博客 865

Jedis源码分析(二)-Jedis的内部实现(Client,Pipeline,Transaction)

Jedis源码分析共有四个章节,以下为各章链接: Jedis源码分析(一)-Jedis介绍 Jedis源码分析(二)-Jedis类结构及实现 Jedis源码分析(三)- JedisCluster类结构及实现 Jedis源码分析(四)-JedisSentinel与ShardedJedis介绍 1 Jedis的类结构 ​ 首先看Jedis的内部结构,图2-1中用橘色框标出了主要支架, 为突出...

liuqinen的博客 663

Hi3516CV610 YOLOv8模型转换与部署实战:从源码到板端推理全流程解析

本文详细解析了Hi3516CV610开发板上YOLOv8模型的转换与部署全流程,包括模型转换、量化、编译和部署等关键步骤。通过实战案例和避坑指南,帮助开发者高效实现从PyTorch模型到嵌入式设备的推理优化,适用于智能门禁、视频分析等实时场景。

weixin_30790841的博客 652

Red Hat Enterprise Linux 9.2

安装Red Hat Enterprise Linux 9.2

zhurobert的博客 940

Jedis

一、键操作: 二、字符串操作: 三、整数和浮点数操作: 四、列表(List)操作: 五、集合(Set)操作: 六、哈希(Hash)操作: 七、有序集合(Zsort)操作: 八、排序操作: Java 连接 MySql 我们有 mysql-connector ,连接 Redis 我们有 jedis。 九、实例 引入依赖 <dependen...

JinXYan的博客 275

Diffusion、VAE与GAN:三大生成模型的原理对比与应用场景解析

本文深入解析了Diffusion、VAE与GAN三大生成模型的核心原理与特性。Diffusion模型通过逆向去噪过程实现高质量图像生成,但计算成本较高;VAE擅长学习概率潜空间,训练稳定但图像偏模糊;GAN通过对抗训练生成锐利图像,但存在模式崩溃风险。文章结合实战场景,为图像生成、修复、超分辨率等任务提供了清晰的模型选择指南。

weixin_29063979的博客 342

Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍

一、普通同步方式 二、事务方式(Transactions) 三、管道(Pipelining) 四、管道中调用事务 五、分布式直连同步调用 六、分布式直连异步调用 七、分布式连接池同步调用 八、分布式连接池异步调用 九、需要注意的地方 十、测试 十一...

chuteng3602的博客 354

基于立创EDA的IP5389BZ+IP6829 100W有线15W无线带屏充电宝DIY全流程解析

本文详细解析了基于立创EDA平台,采用IP5389BZ和IP6829芯片DIY一款100W有线快充、15W无线充电并带显示屏的移动电源的全过程。内容涵盖核心功能规划、硬件选型、电路设计、PCB布局、焊接组装、分步调试以及软件逻辑,为电子爱好者提供了一份从原理到实践的完整指南,并重点强调了电池安全与IP6829供电电压等关键注意事项。

weixin_34374684的博客 306

一文读懂「Chain of Thought,CoT」思维链

Chain-of-Thought(CoT)是一种改进的Prompt技术,目的在于提升大模型LLMs在复杂推理任务上的表现,对于复杂问题尤其是复杂的数学题大模型很难直接给出正确答案。如算术推理(arithmetic reasoning)、常识推理(commonsense reasoning)、符号推理(symbolic reasoning)。COT通过要求模型在输出最终答案之前,显式输出中间逐步的推理步骤这一方法来增强大模型的算数、常识和推理能力。简单,但有效。2022 年,在 Google 发布的论文。

女王の专属领地 4万+

redis——事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 一个事务从开始到执行会经历以下三个阶段: 开始事务。 命令入队。 执行事务。 以下是一个事务的例子, 它先以M...

少说,多做。 4501

stable diffusioncontrolNet 预处理器/模型的下载及安装使用教程

首先说明,controlNet 的模型 不同于stable diffusion 模型,这一点一定要区分清楚。下面提供多个ControlNet 预处理器+ 专用模型的百度网盘下载链接,都是由群友整理贡献,但各自包含的版本不同,大家可自行选择。推荐下载紫色链接内的模型,fp16版文件更小,稍微新一些的controlnet插件还添加了对control-lora的支持(注意,要求controlnet插件的版本比12月16号新(1.1.423以上)才能正常识别),推荐下载;

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3384

详解Redis之事务

详解Redis的事务,包括概念,特性,常用命令及使用演示。

. 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Redis】事务

【Redis】事务

m0_72563041的博客 998

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

[Redis] Redis事务

🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)🎃Redis(97平均质量分)🐰RabbitMQ(97平均质量分)

无需多言 2125

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[Redis][事务]详细讲解

[Redis][事务]详细讲解

SnowK博客 5322

Redis之Redis事务

文章目录一、Redis事务的概念二、Redis事务没有隔离级别的概念三、Redis不保证原子性四、Redis事务的三个阶段五、Redis事务相关命令六、Redis事务使用案例总结 Redis之Redis事务 一、Redis事务的概念 Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。 总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命

weixin_37548768的博客 1万+

Redis 事务

Redis 事务 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 一个事务从开始到执行会经历以下三个阶段: 开始事务。 命令入队。 执行事务。 以下是一个事务的例子...

努力奔跑 2万+

redis的事务

redis通过 multi, exec等命令来实现事务功能,是一种在一个事务内,将事务内的多个请求打包,然后一次性、按顺序地执行多个命令,在事务执行期间,服务器而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。

Zj_boring的博客 1776

《Redis》事务

Redis的原子性与事务机制与MySQL有显著差异。Redis事务通过队列实现批量执行命令,不具备回滚机制、隔离性和一致性保证,仅确保命令连续执行。使用MULTI、EXEC、DISCARD等命令管理事务,WATCH命令通过乐观锁机制监控键值变化。Redis事务适用于简单场景如抢票系统,但功能弱于传统数据库事务,无法处理复杂的数据一致性问题,本质上是通过事务队列实现命令的批量执行。

如果需要沟通,可添加微信公众号找我免费答疑 746

【Redis入门到精通八】Redis事务与MySQL事务对比

事务的概念其实就是把一系列操作绑定成一组,让这一组操作能够批量执行,不过在MySQL中有复杂的机制能够保证这一组操作执行并且一定能成功执行,否则就一条也执行不了,但是Redis中的事务就没有这么靠谱,它只负责把操作绑在一起,如果其中有执行失败的操作,事务无法自动回滚。Redis 事务本质上是在服务器上搞了⼀个 "事务队列". 每次客⼾端在事务中进⾏⼀个操作, 都会把命令先发给服务器, 放到 "事务队列" 中(但是并不会立即执行),而是会在真正收到 EXEC 命令之后, 才真正执行队列中的所有操作.

2203_75565612的博客 1110

【redis进阶】Redis 事务

watch 必须搭配事务使用,并且必须在 mutli 之前使用,当执行 watch key 的时候就会给这个 key 安排一个 版本号,版本号可以理解成一个 "整数" 每次在修改的时候,版本号都会 "变大",watch 本质上是给 exec 加了个判定条件,在执行 事务 中命令的时候,此处就会做出判定,判定当前这个 key 的版本号,和最初 watch 的时候记录的版本号 是否 一致!在执行事务的时候,如果某个事务中修改的值,被别的客户端修改了,此时就容易出现数据不一致的问题。

qq_52842680的博客 1029

事务例子_Redis事务系列之一Redis事务详解

一、前言本章是redis事务系列知识第一章,redis事务系列主要讲解以下内容:redis 事务redis乐观锁讲解redis乐观锁实现秒杀我们一步一步来,本章主要讲解事务。二、事务2.1事务阐述讲redis事务之前,我们先来看看事务的定义。事务:一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。但redis的事务不并不是完整意义上的事务,我们称之为弱事务,为什么这么说呢?r...

weixin_42100032的博客 152
上一篇: Redis管道-pipeline
下一篇: mybatis常用知识点笔记
村口老师傅
博客等级 码龄9年 67粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值