redis 事务

redis事务是什么
  • 可以一次执行多个命令,本质是一组命令的集合
  • 一个事务中所有的命令都会序列化 按顺序的串行化执行而不会被其他命令插入 不许加塞
能干什么
  • 一个队列中 一次性 顺序的 排他性的执行一系列命令
怎么弄
  • 常见命令
    • multi 标记一个事务块的开始
    • exec 执行所有事务块内的命令
    • discard 取消事务 放弃执行事务块内的所有命令
    • unwatch 取消watch命令对所有key的监视
    • watch key1 key2... 监视一个key 如果事务执行之前这个key被其他命令所改动 那么事务将被打断
  • 正常执行
  • 放弃事务
  • 全体失效
  • 取消h执行错误的指令
  • watch监控
    • redis使用watch 来提供乐观锁锁定 类似于cas check and set
      • 一容具荣 一损俱损
      • 监控 key
      • 在multi内修改前 被另一个端口修改后 multi内的命令都会失效 就类似于 multi内的指令语法由错误
    • 初始化 k1 和balance 两个key先监控 再开启multi 保证两个key变动在同一个事务内
redis 与 mysql
单独的隔离操作 Redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的
没有隔离级别的概念 因为事务提交前任何指令都不会被实际执行,也就不存在"事务内的查询要看到事务里的更新,在事务外查询不能看到"这种问题了
不保证原子性 Redis的事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力
排他性 Redis会保证一个事务内的命令依次执行,而不会被其它命令插入
总结

开启 multi 开始一个事务

入队 将多个命令入队到事务中 接到这些命令不会立即执行 而是放到等待执行的事务中的队列里面

执行 由exec命令触发事务

相关推荐
Rookie也要加油27 分钟前
01_SQLite
数据库·sqlite
liuxin3344556631 分钟前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。1 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec1 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa2 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke2 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D2 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录2 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.3 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构
程序猿小D3 小时前
第二百六十七节 JPA教程 - JPA查询AND条件示例
java·开发语言·前端·数据库·windows·python·jpa