6.Redis的事务

来源:互联网 发布:手机淘宝微淘在哪里 编辑:程序博客网 时间:2024/05/29 09:16


Redis的事务:

Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis的最小执行单元,一个事务中的命令要么都执行,要么都不执行。

事务的原理是先将属于一个事务的命令请求打包发送给Redis,然后再让Redis一次性、按顺序地执行这些命令。

在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。

事务示例:

redis> MULTI

OK

redis> SADD "user:1:following" 2

QUEUED

redis> SADD "user:2:followers" 1

QUEUED

redis> EXEC

1) (integer) 1

2) (integer) 1

上面的代码演示了事务使用方式。

首先MULTI命令告诉Redis,下面的命令属于一个事务,先缓存不执行;

Redis回答OK

发送两个SADD命令,Redis没有执行命令,而是放入等待队列QUEUED

要执行的命令发送完毕后,发送EXEC命令告诉Redis可以执行了;

Redis将等待执行的命令按照发送顺序执行,并依次返回执行结果。

事务的ACID性质

Redis中,事务总是具有原子性(Atomicity)、一致性(Consistency)和隔离性(Isolation),并且当Redis运行在某种特定的持久化模式下时,事务也具有耐久性(Durability)。

原子性:事务中的所有命令打包一次性执行,不允许插队;

一致性:Redis通过谨慎的错误检测和简单的设计来保证;

隔离性:单线程执行事务,并保证执行期间不会中断;

耐久性:需要特定的持久化模式支持。

故障处理:

如果在发送EXEC命令前客户端断线,则Redis会清空事务队列,所有命令都不执行;但如果已经发送了EXEC命令后客户端断线,则Redis会执行所有命令的。

Redis的事务还能保证一个事务内的命令依次执行而不被其他命令插入。

如果一个事务中的某个命令执行出错,Redis会如何处理?

当在命令执行前出现错误,如语法错误,Redis会直接返回错误,所有命令都不执行;

当在命令执行中出现错误,如执行某个命令时运行时错误,由于执行前无法发现,Redis会接受并执行,所有命令都会执行。

Redis的事务没有关系数据库事务提供的回滚(rollback)功能。

原创粉丝点击