Redis学习手册12—流水线与事务

流水线

Redis的流水线特性:这个特性允许客户端把任意多条Redis命令请求打包在一起,然后一次性的全部发送给服务器,而服务器则会在流水线包含的所有命令请求处理完毕之后,一次性的将它们的执行结果全部返回给客户端。

通过使用流水线特性,我们可以将执行多条命令所需的网络通信次数从 N N N 次降低到 1 次,这可以大幅度减少程序在网络通信方面耗费的时间,使得程序的执行效率得到显著的提升。

事务

Redis事务保障了多条命令执行的情况下,要么全部执行成功,要么全都不执行。

MULTI:开启事务

使用MULTI命令可以开启Redis事务支持。一般情况下除了少数阻塞命令外,Redis命令总会立即执行,但是当开启事务后,所有输入的命令都不会立即执行,而是按顺序放入一个事务队列中,等待事务执行时再统一执行。

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET test "hello world"
QUEUED
127.0.0.1:6379> SADD fruits "apple" "banana" "cherry"
QUEUED

如上所示,服务器在客户端发送的命令放入事务队列之后,会返回一个 QUEUED 作为结果。

EXEC:执行事务

在使用 MULTI 命令开启事务并将任意多个命令放入事务队列之后,用户就可以使用 EXEC命令来执行事务了:

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET test "hello world"
QUEUED
127.0.0.1:6379> SADD fruits "apple" "banana" "cherry"
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (integer) 3

当事务成功执行时,EXEC命令将返回一个列表作为结果,这个列表会按照命令的入队顺序依次包含各个命令的执行结果。

DISCARD:放弃事务

如果用户在开启事务之后,不想执行事务了,则可以使用如下命令放弃事务:

DISCARD

事务的安全性

人们一般都会根据数据库的ACID性质的支持程度去判断数据库的事务是否安全。
具体来说,Redis的事务总是具有ACID性质中的ACI性质:

  • 原子性(Atomic):如果事务成功执行,那么事务中包含的所有命令都会被执行;相反,如果事务执行失败,那么事务中包含的所有命令都不会被执行。
  • 一致性(Consistent):Redis服务器会对事务及其包含的命令进行检查,确保无论事务是否执行成功,事务本身都不会对数据库造成破坏。
  • 隔离性(Isolate):每个Redis客户端都拥有自己独立的事务队列,并且每个Redis事务都是独立执行的,不同事务之间不会互相干扰。

除此之外,当Redis服务器运行在持久化模式之下时,Redis的事务也具有ACID中的D性质:

  • 持久性(Durable):当事务执行完毕时,它的结果将被存储到硬盘中,即使服务器在此之后停机,事务对数据库所做的修改也不会丢失。

因为事务在执行时会独占服务器,所以用户应该避免在事务中执行过多命令,更不要将一些需要大量计算的命令放入事务中,以免造成服务器阻塞。

WATCH:对键进行监视

客户端可以通过执行 WATCH 命令,要求服务器对一个或多个数据库键进行监视,如果在客户端尝试执行事务之前,这些键的值发生了变化,那么服务器将拒绝执行客户端发送的事务,并向它返回空值:

WATCH key [key ... ]

127.0.0.1:6379> WATCH msg
OK
127.0.0.1:6379> GET msg
"hello world"
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET user::1::email "peter@123.com"
QUEUED
127.0.0.1:6379> SET msg "hello redis"
QUEUED
127.0.0.1:6379> EXEC
(nil)   -- msg键已被修改

UNWATCH:取消对键的监视

使用UNWATCH命令可以取消对键的监视:

UNWATCH

上一篇:Redis学习手册11—自动过期

下一篇:Redis学习手册13—Lua脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值