Redis中的事务

一、简介

multi(标志事务开始),exec(事务执行),discard(放弃事务)、watch(监控某个数据)是redis中的相关命令。

redis中的事务有如下两个保证:

1、保证事务执行的过程不会被其他线程打断(隔离性)

2、保证事务的原子性(原子性)

二、详细介绍命令

multi表示一个事务的开始,multi开始之后,客户端可以发送多条命令,但这些命令不会被执行,而是放到一个队列中,只有个exec命令才会真正执行命令行。

通过discard命令,可以清空事务队列,也就是放弃本次事务的执行。

而watch命令,使用乐观锁(CAS)的方式,对Watch的数据进行监控。如果watch的变量在exec执行之前被修改了,那么整个事务都会取消,exec返回“nil-reply”表示事务失败。

比如我们对一个数据自增1操作

val=get key

val=val+1

set key $val

如果多个客户端同时操作,将可能操作错误。

可以通过watch解决该问题

watch key

val=get key

val=val+1

multi

set key $val

exec

三、事务中的错误

事务发生错误分两种情况

1、在exec执行之前发生错误

这种错误比如命令语句的错误,那么在redis2.6.5之前,调用exec将只执行正确的命令语句;而在redis2.6.5之后,调用exec后会选择放弃该事务。

2、在exec执行中发生错误

这种错误,将导致正确的命令执行,错误的命令不执行。

与mysql等数据不同的是,redis并不提供回滚rollback操作。

记住:即使事务队列在exec执行过程中发生了错误,错误的命令不会影响到其他命令,其他正确的命令仍然会正确执行。

你可能感兴趣的:(事务,redis,redis,数据库)