redis事务的简单介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。(注:如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明) https://blog.csdn.net/zgaoq/article/details/89640263

所谓事务应具有以下特效:原子性(Atomicity), 一致性(Consistency),隔离性(Isolation),持久性(Durability),简称ACID,但redis所提供的事务比较简单,它通过MULTI、EXEC、DISCARD和WATCH等命令实现事务。

而Redis只支持简单的事务,将执行命令放入队列缓存,当程序中有异常或命令出错,执行DISCARD清空缓存队列不执行队列中命令,其事务过程有以下特点:

事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

事务是一个泛原子操作(这里我以泛原子称呼,在某些情况redis的事务不是原子性的,后续会说明):事务中的命令要么全部被执行,要么全部都不执行。

MULTI:开启了一个事务,将需要执行的命令全部入队列。

EXEC:触发一个事务,并且从队列中取出命令依次执行(先入队列的命令先被执行FIFO)

(1)、redis没有回滚机制,因此执行事务过程中出现错误时,需要使用者来处理
(2)、运行过程中出现错误,正确的命令将会被执行。
(3)、如果将要执行的命令出现错误,那么所有的命令将都不会被执行。

在MULTI执行之前,使用WATCH命令监控一个或多个key,如果key有发生变化,则事务不会被执行。
WATCH key [key ...]   #当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的

猜你喜欢

转载自blog.csdn.net/zgaoq/article/details/89640263