Redis事务详解

乔欣 Java面经 发布时间:2022-11-06 23:03:09 阅读数:17491 1 Redis面试题(2023优化版)
下文笔者将详细讲解事务的点点滴滴,如下所示

Redis事务

Redis事务同其它数据库中的事务概念一致,要么全部成功,要么全部失败
但是Redis事务有点小小的不同,他和别的数据库事务不同的地方在于
   1.Redis单条命令是原子性的
   2.Redis的事务并没有原子性
 所以我们可将Redis事务理解为,并不是严格意义上的事务
 而是Redis特有的事务 

Redis事务简介

Redis事务:
  是一个将多个脚本打包并批量执行脚本
   redis事务不保证原子性,没有回滚
   如果中间某条命令执行失败,前面已执行命令不回滚,后续的指令继续执行


Redis事务可一次执行多个命令,并拥有以下特性: 
 1.批量操作在发送 EXEC 命令前被放入队列缓存
 2.收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,
    前面已执行的命令不回滚,后续的命令继续执行
 3.事务在执行的过程中,
    不会被其他客户端发送来的命令请求所打断

注意事项:
   Redis事务只保证了一致性(C)和隔离性(I)
     但并不保证原子性(A)和持久性(D)

redis不支持回滚的缘由

Redis 命令只会因为错误的语法而失败(并且这些问题不能在入队时发现)
 或命令用在了错误类型的键上面
 所以redis的错误,可理解为编码上的失误
 所以我们只需保证编码的正确,无需回滚 

Redis事务三阶段

 
 事务开始MULTI
 命令入队
 事务执行EXEC

Redis事务命令

序号 命令 备注
1 WATCH WATCH 命令是一个乐观锁
可以为 Redis 事务提供 check-and-set (CAS)行为
可以监控一个或多个键,一旦其中有一个键被修改(或删除)
之后的事务就不会执行
监控一直持续到EXEC命令
2 UNWATCH UNWATCH命令可以取消watch对所有key的监控
3 MULTI MULTI命令用于开启一个事务,它总是返回OK。
MULTI执行之后,
客户端可以继续向服务器发送任意多条命令,
这些命令不会立即被执行,
而是被放到一个队列中,
当EXEC命令被调用时,所有队列中的命令才会被执行
4 EXEC EXEC:执行所有事务块内的命令。返回事务块内所有命令的返回值,
按命令执行的先后顺序排列。当操作被打断时,返回空值 nil
5 DISCARD 通过调用DISCARD,客户端可以清空事务队列,并放弃执行事务,
并且客户端会从事务状态中退出
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202211/16677478394825.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者