前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 的事务

Redis 的事务

作者头像
Meteors
发布2021-12-08 20:19:01
2620
发布2021-12-08 20:19:01
举报
文章被收录于专栏:星空畅想

事务是数据库的一个重要功能。所谓事务,就是指对数据进行读写的一系列操作。Redis通过MULTI、EXEC、WATCH等命令来实现事务功能:

代码语言:javascript
复制
redis> MULTI
OK

redis> SET "name" "mike"
QUEUED

redis> GET "age"
QUEUED

redis> EXEC
1) OK
2) 20
复制代码

该事务首先以一个MULTI命令开始,接着将多个命令放入事务当中,最后由EXEC命令将这个事务提交给服务器。

其中:

  1. MULTI命令的执行标志着事务的开始,可以将执行该命令的客户端从非事务状态切换至事务状态;
  2. 当一个客户端进入事务状态时,如果客户端发送的不是EXEC/DISCARD/WATCH/MULTI四个命令其中的一个,那么服务器不会立即执行这个命令,而是将这个命令放入一个事务队列(FIFO)里,然后向客户端返回QUEUED回复;
  3. 当处于事务状态的客户端向服务器发送EXEC命令时,这个EXEC命令会被服务器立刻执行,服务器会遍历这个客户端的事务队列,执行队列中保存的所有命令,最后将执行命令所得的结果全部返回给客户端。

乐观锁

WATCH命令是Redis保证事务的乐观锁(optimistic locking),在EXEC命令执行之前,监视人意数量的数据库键,并在EXEC执行之后,检查被监视的键是否被修改。如果有一个键被修改,服务器会拒绝执行事务,确保事务的安全性。

ACID性质

事务在执行时,会提供专门的属性保证,包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),也就是 ACID 属性。这些属性既包括了对事务执行结果的要求,也有对数据库在事务执行前后的数据状态变化的要求。针对这四个性质,Redis做了如下内容:

原子性

对于Redis的事务功能来说,事务队列中的命令要么就全部执行,要么就一个都不执行,因此,Redis的事务时具有原子性的。Redis事务和关系型数据库事务的最大区别在于,Redis不支持事务回滚机制(作者觉得不符合Redis的定位),即使事务队列中某个命令执行期间出现了错误,整个事务也会继续执行下去,命令错误有三种情况:

  1. 命令入队时报错,Redis会放弃事务执行,保证原子性;
  2. 命令入队时没报错,实际执行时报错,Redis不保证原子性;
  3. XEC 命令执行时实例故障,如果开启了 AOF 日志,Redis可以保证原子性,去除未完成事务。

一致性

事务具有一致性是指:如果数据库在执行事务之前是一致的,那么在事务执行之后,无论事务是否成功,数据库应该也是一致的。事务的一致性收到错误命令和实例故障的影响:

  1. 命令入队时报错,Redis会放弃事务执行,数据库是一致的;
  2. 命令入队时没报错,实际执行时报错,有错误的命令不会执行,正确的命令正常执行,数据库也是一致的;
  3. EXEC 命令执行时实例故障,无论开启了AOF还是RDB,数据库都可以保证一致。

隔离性

事务的隔离性是指,在多事务并发执行时,各个事务之间不会互相影响,并且在并行或串行执行事务产生的结果完全相同。由于Redis的乐观锁机制,保证了并行状态下的事务执行隔离性,如果并发操作在EXEC命令之后被服务端执行,那么久相当于单线程操作,也是保证隔离性的。

持久性

事务的持久性指的是在事务执行完毕时,执行这个事务所得到的结果已经被保存在永久性存储介质里,执行事务的结果不会丢失。但对于Redis来说,无论是否开启RDB或者AOF的情况下,都会存在数据丢失的情况,所以无法保证事务的持久性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年06月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 乐观锁
  • ACID性质
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档