【Redis】缓存中的事务

官方地址,先上为敬

redis.io/docs/manual...

什么是事务

数据库中的事务是指在一次与数据库连接的会话中,所有的SQL语句,要么都成功,要么都失败。在Redis中,事务是指可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会被序列化,按顺序地串行执行而不会被其他命令插入

Redis的事务有什么作用

可以一次性、顺序性、排他性的执行一系列命令(一个队列中)

Redis事务 🆚 数据库事务

Redis事务的特点

  1. 单独的隔离操作
    1. Redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的
  1. 没有隔离级别的概念
    1. 因为事务提交前任何指令都不会被实际执行,也就不存在"事务内的查询要看到事务里的更新,在事务外查询不能看到"这种问题了
  1. 不保证原子性
    1. Redis的事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力
  1. 排它性
    1. Redis会保证一个事务内的命令依次执行,而不会被其它命令插入

事务相关指令

正常执行

  • 事务开始:multi
  • 事务结束:exec

取消事务

  • 事务开始:multi
  • 事务取消:discard

异常情况

  • Redis不支持回滚(rollbacks)
  • 语法错误,全部取消(全体连坐)
  • 语法通过,对的成功,异常的失败(冤头债主)

watch监控

Redis使用的是乐观锁(为了高性能)

乐观锁

Optimistic Lock,每次拿数据都认为别人不会修改,所以不会上锁,但是在更新是我时候会判断下此期间别人有没有去更新过这个数据

乐观锁策略

提交版本必须大于当前记录版本才能执行更新,否则整个事务失败

Redis使用 watch 提供乐观锁,类似CAS(Check and Set)

语法操作

  • watch key 添加监控
  • unwatch key 取消监控 执行exec、或者客户端连接丢失监控会自动取消

实操实例

exec结束当前事务,返回了nil,再次查询name发现并未修改成功,而且a的修改也未成功,即整个事务失败了

x

总结

  • 开启:以MULTI开始一个事务
  • 入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面
  • 执行:由EXEC命令触发事务
相关推荐
garmin Chen1 小时前
redis面试题
java·数据库·redis·缓存
2601_962181962 小时前
Redis Redis介绍、安装 - Redis客户端
数据库·redis·postman
程序员夏洛6 小时前
Redis 中如何实现分布式锁?
数据库·redis·分布式
程序员夏洛9 小时前
Redis 的 Red Lock 是什么?你了解吗?
数据库·redis·缓存
程序员夏洛9 小时前
Redis 实现分布式锁时可能遇到的问题有哪些?
数据库·redis·分布式
Rain的Java大神之路19 小时前
PC版网站被狂刷怎么处理
java·数据库·redis·后端·mysql·web安全·运维开发
智购科技智能售货柜19 小时前
2026自动售货机设备能耗计量系统:从功率监测到能效分析的工程实践~YH
数据库·人工智能·redis·缓存·架构·perl·symfony
Jul1en_1 天前
【Java 脚手架】封装通用工具类-3
java·开发语言·redis·缓存·ai·bootstrap·rabbitmq
李昊哲小课1 天前
Spring Boot 4 旅游主题实战教程 阶段四:缓存与底层进阶
spring boot·redis·缓存·性能优化·log4j·旅游·性能
上火的金鱼妹1 天前
redis集群部署与连接
数据库·redis·缓存