redis事物

redis事物不支持回滚 

redis事物支持单实例  不支持集群使用


redis事务执行过程

一个事务从开始到执行会经历以下三个阶段:

1)开始事务。

2)命令入队。当客户端进入事务状态之后, 服务器在收到来自客户端的命令时, 不会立即执行命令, 而是将这些命令全部放进一个事务队列里, 然后返回QUEUED, 表示命令已入队:

3)执行事务。若在事务队列中存在命令性错误,则执行EXEC命令时,所有命令都不会执行

                          若在事务队列中存在运行错误,则执行EXEC命令时,其他正确命令会被执行,错误命令抛出异常。  运行错误是指用不同的语法操作不同的数据类型 

事务的 ACID 性质

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

原子性

事务具有原子性指的是, 数据库将事务中的多个操作当作一个整体来执行,服务器要么就执行事务中的所有操作, 要么就一个操作也不执行。

对于Redis的事务功能来说,事务队列中的命令要么就全部都执行,要么就一个都不执行,因此, Redis的事务是具有原子性的。

Redis的事务和传统的关系型数据库事务的最大区别在于,Redis不支持事务回滚机制(rollback), 即使事务队列中的某个命令在执行期间出现了错误,整个事务也会继续执行下去,直到将事务队列中的所有命令都执行完毕为止。 下面展示了即使RPUSH命令在执行期间出现了错误,事务的后续命令也会继续执行下去, 并且之前执行的命令也不会有任何影响:

127.0.0.1:6379> set msg hello

OK

127.0.0.1:6379> multi

OK

127.0.0.1:6379> sadd fruit apple banana cherry

QUEUED

127.0.0.1:6379> rpush msg bye redis

QUEUED

127.0.0.1:6379> sadd alphabet a b c

QUEUED

127.0.0.1:6379> exec

1) (integer) 3

2) (error) WRONGTYPE Operation against a key holding the wrong kind of value

3) (integer) 3

不支持事务回滚是因为这种复杂的功能和Redis追求简单高效的设计主旨不相符,并且Redis事务的执行时错误通常都是编程错误产生的, 这种错误通常只会出现在开发环境中, 而很少会在实际的生产环境中出现。

一致性

事务的一致性是指,如果数据库执行前是一致的,那么在事务执行后,无论事务是否执行成功,数据库也应该是一致的。

隔离性

事务的隔离性指的是,即使数据库中有多个事务并发地执行,各个事务之间也不会互相 影响,并且在并发状态下执行的事务和串行执行的事务产生的结果完全相同。

因为Redis使用单线程的方式来执行事务(以及事务队列中的命令),并且服务器保证, 在执行事务期间不会对事务进行中断,因此,Redis的事务总是以串行的方式运行的,并且 事务也总是具有隔离性的。

持久性

事务的耐久性指的是,当一个事务执行完毕时,执行这个事务所得的结果巳经被保存到 永久性存储介质(比如硬盘)里面了, 即使服务器在事务执行完毕 之后停机, 执行事务所得的结果也不会丢失。Redis事务的耐久性由服务器所使用持久化模式决定的:

(1) 当服务器在无持久化的内存模式下运作时,事务不具有耐久性。因为一旦服务器停机,

服务器所有的数据都将丢失。

(2) 当服务器在ROB持久化模式下运作时,事务同样不具有耐久性。因为服务器只会在特定的保存条件下才会执行BGSAVE命令,并且异步执行的BGSAVE命令不能保证事务的数据第一时间被保存到硬盘上。

(3) 当服务器运行在AOF持久化模式下,并且appendfsync选项的值为always时,程序总会在执行命令之后调用同步(sync)函数,将命令数据真正地保存到硬盘里。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务功能, 本章首先...
    binge1024阅读 565评论 0 2
  • Redis事物 介绍 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:事务是一个单独的隔离操作...
    牧童US阅读 250评论 0 0
  • 涉及到的相关命令 multi exec discard watch unwatch 1:multi,exec 对于...
    程序员小饭阅读 559评论 2 1
  • Redis通过MULTI、EXEC、WATCH等命令来实现事务(transaction)功能。事务提供了一种将多个...
    johnny_zm阅读 134评论 0 0
  • 所谓事务,就是一个非黑即白的定义,一组命令,要么全做,要么全部,不存在半做半不做的灰色地带。 这一点对于保持数据库...
    冰河winner阅读 351评论 0 1

友情链接更多精彩内容