Redis(事务)

本篇博客中 Redis 事务是和 MySQL 事务对比来说的(要不我也不会了 ...)


Redis 事务是什么?

Redis 事务的主要意义是 把命令打包在一起执行 , 避免其他客户端在我执行一些命令的过程中 插队 . ("秒杀"场景, "超卖"问题)


Redis 事务 与 MySQL 事务 对比

相比较于 MySQL 事务的特性 ACID :

  • Redis 事务的原子性: 把多个命令打包在一起, 要么全部执行, 要么全部不执行 (不保证执行成功, 如果中间有失败命令, 不影响其他命令的执行).
  • Redis 事务不具有一致性: Redis 事务没有约束, 也不具有回滚操作, 事务执行过程中如果某个操作出错, 就会造成事务执行前后数据库数据不一致.
  • Redis 事务不具备持久性: Redis 是 内存数据库 , 数据存储在内存中. (ps: Redis 持久化和事务机制没有半毛钱关系, 那是另一套 Redis 机制) .
  • Redis 事务不涉及隔离性: Redis 是单线程模型, 所有请求/命令/ 事务 , 均是串行执行.

Redis 事务的执行

Redis 事务的执行: 开启事务后, 先让出 Redis 主线程, 将命令放入事务队列, 等待命令全部集齐, 事务执行, 此时将队列中的命令放入主线程顺序执行(其他客户端阻塞, 不允许中间插队)


Redis 事务相关命令

开启事务: MULTI

事务执行: EXEC

放弃事务: DISCARD
WATCH key1 key2 ...

监控某个 key, 是否在事务开启后, 事务执行前, 发生了变化

如果发生了变化, 那么本次事务会被直接放弃掉 (事务执行失败)

watch 命令本质是给 exec 命令加了层判定条件, 内部基于 版本号 这样的机制实现 (类似 乐观锁 的效果 )

相关推荐
摇滚侠19 小时前
Redis 零基础到进阶,zset、bitmap、HyperLogLog、GEO、stream、bitfiled,笔记20-27
数据库·redis·笔记
xrkhy20 小时前
canal1.1.8+mysql8.0+jdk17+rabbitMQ+redis的使用02
前端·redis·rabbitmq
coderCatIce20 小时前
Redis-常见 Java 客户端
redis·后端
DemonAvenger20 小时前
Redis内存管理与优化策略:避免OOM的最佳实践
数据库·redis·性能优化
T1ssy20 小时前
深入解析Redis三大缓存问题:穿透、击穿、雪崩及解决方案
数据库·redis·缓存
✿ ༺ ོIT技术༻21 小时前
服务端高并发分布式结构演进之路
运维·服务器·redis·分布式·架构
风跟我说过她21 小时前
基于Scrapy-Redis的分布式房产数据爬虫系统设计与实现
redis·分布式·爬虫·scrapy
Haooog21 小时前
Redis面试题(不定时更新)
数据库·redis·缓存·面试
孙同学_21 小时前
【Linux篇】线程互斥、同步与线程池设计:原理与实践
数据库·redis·缓存
大佐不会说日语~21 小时前
Spring AI Alibaba 对话记忆丢失问题:Redis 缓存过期后如何恢复 AI 上下文
java·人工智能·spring boot·redis·spring·缓存