Redis---事务

Redis的事务和MySQL的事务相比算是极简版了。

Redis事务的特征

1.弱化版本的原子性

Redis事务的原子性只是将多个操作打包在一起,要么全部执行,要么全部不执行,但是并不能像MySQL一样保证执行出现错误进行事务回滚。实质上Redis的事务只是将多个操作添加进一个队列中,执行时将队列中的操作按照顺序执行。

2.无一致性

因为Redis的事务没有约束和回滚机制,所以Redis的事务没有一致性。

3.不具备持久性

虽然Redis具有持久化策略,但是持久化策略和事务是没有关系的。

4.不涉及隔离性

因为Redis是一个单线程模型的服务器,所有请求和事务都是串行执行的,并不涉及隔离性。

Redis事务的主要意义就是为了打包,避免其他客户端的操作打乱执行顺序。

一个典型的应用场景就是秒杀系统,可以将每个用户检测商品库存和扣除商品的操作打包成一个事务,这样在无锁的情况下也可以避免超买的情况。

Redis事务的实现

Redis为每一个客户端都创建一个队列(在开启事务时),遇到执行事务命令时,此时就会将队列中的任务按照顺序执行完。

事务相关命令

开启事务:Multi

执行事务:Exec

放弃当前事务:Discard

其次如果开启事务后,发生了若干个指令后但是并未执行事务,此时如果服务器重启,就会放弃当前事务(相当于Discard)。

watch:在Multi前使用,监控某个key,是否在事务执行前被其他客户端修改,如果在Multi和Exec之间有修改,就不执行事务。

Unwatch:取消对某个key的监控。

Watch的实现原理:是基于版本号实现的,类似于"乐观锁",每次执行Watch key时,都会分配一个版本号,每次修改时,版本号都会变大,在执行Exec前,都会判定当前key的版本号和最初watch时的版本号是否一致,如果修改了,就返回nil。

相关推荐
YangYang9YangYan19 分钟前
2026 电商数据运营校招 JD 梳理|岗位任务、技能与面试考点汇总
大数据·数据库·数据分析
Sun 328520 分钟前
读懂集中式主备的集群状态与节点角色
数据库·opengauss·集群·节点角色·磐维数据库·运行状态
溪语流沙40 分钟前
Django + Vue电商项目第001讲:开篇|注册登录加增删改查,那不是电商
redis·python·mysql·docker·typescript·django·vue
努力努力再努力wz1 小时前
【Redis进阶系列】:从主从复制到 Sentinel,一文建立故障检测、Leader 选举与 Failover 的完整心智模型
数据库·redis·缓存
达梦数据1 小时前
DMDRS搭建部署简介与运行环境
数据库
Omics Pro1 小时前
1个月2轮融资!长寿虚拟细胞
数据库·人工智能·算法·机器学习·自然语言处理
zcn1261 小时前
row_number()函数与group by性能比较
数据库·sql优化改写
Wang's Blog2 小时前
Java 项目实战: 外卖平台-后台系统登录功能开发
java·服务器·redis
小K讲AI营销2 小时前
AI基础设施融资路径的中美比较:资本市场模式与政策金融模式
大数据·数据库·人工智能
净水深流2 小时前
中国冷链冷库行业数据分析:从规模扩张到技术驱动
大数据·数据库·人工智能·冷库冷链