redis学习程序员redis

Redis

2018-11-27  本文已影响11人  eleven_a1dc

redis 事务 transaction
相关命令

事务

multi, exec, discard, watch 是redis 事务的基础。他们允许在单个步骤执行一组命令。有两个重要的保证。

使用

使用multi 命令开始Redis的事务,这个命令总是返回ok。此时用户可以发出多个命令。而不是执行这些命令。redis 会把它放队列里。一旦EXEC命令被调用,所有命令都会被执行
调用discard 会刷新这个事务 队列,并且退出事务。

> MULTI
OK
> INCR foo
QUEUED
> INCR bar
QUEUED
> EXEC
1) (integer) 1
2) (integer) 1

exec 返回一个返回值的数组。这个数组的每个元素是这个事务的每个命令的响应,按命令相同的顺序执行。

在事务里的错误

在一个事务中可能会出现以下这两种错误

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a 3
QUEUED
127.0.0.1:6379> lpop a
QUEUED
127.0.0.1:6379> set a 2
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
3) OK
127.0.0.1:6379> get a
"2"

redis 事务不支持回滚
为什么不支持回滚?

WATCH

乐观锁
watch 被用来提供check-and-set(CAS) 行为对于redis 事务
例子
client 1

> watch a
> multi
> incr a

client2

> multi
> incr a
> exec

然后client1

> exec
(nil)

当监视的key 在事务期间内被修改了,那exec命令会返回nil来通知事务失败了。

上一篇 下一篇

猜你喜欢

热点阅读