redis事务

大致跟mysql的数据库的事务 意思是一样的,

什么是事务?

为了确保一系列相关的数据库操作要么全部成功,要么全部失败,从而避免了数据的不一致性和部分更新等问题。

那么如数据库事务有什么区别呢?

1.非原子性 redis事务不保证所有指令同时成功或同时失败,如果其中一条命令执行失败,其他命令仍然会继续执行,而不是全部回滚。

2.单独的隔离操作和无隔离级别 执行完事务内的所有指令前不能执行其他客户端的请求。

3.排它性 redis保证事务依次执行,不会被其他命令插入

废话不多直接上指令

开始事务------结束事务

multi//开始

指令...

exec//结束

那么如果过程中你发现不想使用事务怎么办?

使用discard直接清除当前事务

有的同学会发现,上述是指令有出错的情况

那如果其中的指令有问题会出现什么情况?

1.写的指令有问题

例如写一个set k1 却不给value等,即在redis中不存在这样的命令,

首先我们得知道不管命令对错使用事务都会插入!

我们知道redis是将命令插入队列中,所以如果命令错误在执行事务时就不会执行当前事务。

2.写的没问题执行过程中出错

例如:set k1 v1

又使用 incr k1

在执行过程中发现问题后,错误的会不执行,而其他的指令不会改变

有点像编译和执行

编译发现错所有不能运行,执行发现错误是已执行部分了。


监控?

为什么要有监控?

在多线程环境中,如果别人对某数据执行修改操作,而你如果不对某个数据监控就会出现错误情况,与预期理想效果不同。

我们在执行事务前如果开启对某个数据的监控,在执行事务时如果发现监控的数据发生过修改,就会直接停止当前事务。(所有不执行)

开启

watch

结束

unwatch

相关推荐
行百里er5 分钟前
Redis 核心数据结构(二)——List 与消息队列
redis·后端
SelectDB5 分钟前
Apache Doris 高性能 Open Lake Variant 读写技术解析(含对比数据)
大数据·数据库·数据分析
行百里er6 分钟前
Redis 核心数据结构(三)——Hash,把一堆字段塞进一个 Key
redis·后端
SelectDB6 分钟前
多表 Join 与实时更新:Apache Doris 建表、调优与验证全流程(附 ClickHouse 对照)
大数据·数据库·数据分析
小鱼,6 分钟前
人大金仓V9系统表名字冲突,设置search_path不起作用
数据库·kingbase
鸽芷咕6 分钟前
金仓数据库 TB 级迁移提速实战:KDTS 线程数怎么算、JVM 内存怎么给、参数怎么调
数据库
倔强的石头_7 分钟前
慢接口定位实战:从应用日志一路追到 SQL 执行计划
数据库
考虑考虑8 分钟前
SQL中的 CASE WHEN
数据库·后端·sql
SelectDB8 分钟前
Doris 替换 ClickHouse:部署核查命令、常见问题排查与适配说明
大数据·数据库·数据分析
为你学会写情书8 分钟前
从零搭建 SQL 数据库到 ORM 选型:Prisma 与 Drizzle 深度对比
数据库