Redis事务

谈到事务我们不由的想起MySQL的事务的四个特性:原子性,一致性,持久性,隔离性

但Redis事务与其存在一定区别

弱化的原子性:Redis 会对一系列操作进行打包,要么都执行,要么都不执行,但是相较于MySQL,它不具备某些操作执行失败后的回滚

不具备一致性:Redis没有 约束,也不具有回滚性,事务执行过程中操作很有可能出现问题,导致结果的不一致

不具备持久性:Redis本事是内存数据库,主要存储内存数据,虽然有持久化机制,但持久化机制与持久性并没有直接关系

**不具备隔离性:**Redis 是一个单线程的服务器,所有的请求都是"串行"的

Redis 事务存在的意义呢就是

将多个命令打包后一次性、顺序性、排他性执行。事务的主要作用是确保一组命令在执行过程中不被其他客户端的命令打断,从而实现操作的完整性

Redis事务用于哪些场景呢

事务的指令

开启事务 MULTI

执行事务EXEC

取消事务 DISCARD

watch 是对数据进行监控 看是否数据在事务外部被修改

unwatch就是取消对数据的监控

如上述时间轴 如果我们不进行监控则 最终结果是222 但存在歧义 明明是set key 333后执行 那为什么呢

因为当exec执行时它才会执行set key 222 ,为了解除歧义 我们可以使用watch 去监控事务外对数据的操作,watch key 依旧按照上述操作 最后会提示 nil而不是ok 而且最终结果是333

关于watch的实现 就相当于"乐观锁"

如果判定发现版本号比watch时记录的版本号大 那就说明被其他客户端修改了,就丢弃事务中的修改

如果一致才执行事务中的修改

Redis 事务是 "先排队、后批量执行",没有watch的话,事务里的命令会在exec时 "覆盖" 事务外的操作结果;加了watch才能避免这种 "覆盖冲突"

相关推荐
爱写代码的阿森3 分钟前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_21 分钟前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白1 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面2 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧2 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈2 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy2 小时前
log4net 数据库存日志正确配置
数据库
赵丙双2 小时前
Redis 概率相关的数据类型
redis
liuxiaowei32 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba