您的位置:首页 > 数据库 > Redis

redis事务及命令

2017-11-08 18:19 459 查看

redis事务定义:

redis中的事务是一组命令的集合,是redis的最小执行单位,一个事务要么都执行,要么都不执行。(在2.6.5前后定义不一致,2.6.5之前是忽略所有错误命令,之后是遇到错误命令不执行)

reids事务保证一个事务内的命令依次执行,而不会被其他命令插入。

redis事务原理

redis事务的原理是先将属于一个事务的事务发送给redis,然后依次执行这些命令

redis事务注意点

1、redis不支持回滚,如果事务中有错误的操作,无法回滚到处理前的状态,需要开发者处理。

2、redis是单线程的服务,所以事务中不能将等待资源的操作都会立即返回,超时时间失效,因为事务如果等待,其他命令将无法执行。

127.0.0.1:6379> multi
OK
127.0.0.1:6379> blpop testlist 1000
QUEUED
127.0.0.1:6379> exec
1) (nil)
127.0.0.1:6379> blpop testlist 1000


redis事务相关命令

和redis事务相关的redis命令有:

**discard命令

exec命令

multi命令

unwatch命令

watch命令**

1、discard命令-取消事务,发起执行事务块里的所有命令。

discard命令用于取消事务,放弃执行事务块内所有命令。

语法:

discard


版本:2.0.0及以上

返回值:总是ok

127.0.0.1:6379[8]> multi
OK
127.0.0.1:6379[8]> set testdiscard "123"
QUEUED
127.0.0.1:6379[8]> discard
OK
127.0.0.1:6379[8]> exec
(error) ERR EXEC without MULTI
127.0.0.1:6379[8]>


2、exec命令-执行所有事务块内的命令。

exec命令用于执行所有事务块内的命令。

语法:

exec


版本:1.2.0

返回值:事务块内所有命令的返回值,按命令执行的先后顺序排列。当操作被打断时,返回nil,没事务执行exec返回对应的错误信息。

127.0.0.1:6379[8]> multi
OK
127.0.0.1:6379[8]> set testexecok "exec ok"
QUEUED
127.0.0.1:6379[8]> get testexecok
QUEUED
127.0.0.1:6379[8]> exec
1) OK
2) "exec ok"
127.0.0.1:6379[8]>


3、multi命令-标记一个事务块的开始

multi命令用于标记一个事务块的开始

事务内的多条命令会按照先后顺序被放进一个队列中。最后由exec命令原子性地执行。

语法:

multi


版本:1.2.0及以上

返回值:总是ok

上两个例子都包含multi

4、watch命令-监视一个(或多个)key,如果在执行事务之前这个(这些)key被其他命令所改动,你们事务将被打断

语法:

watch key1, [...keyn]


版本:2.2.0及以上

返回值:总是ok

127.0.0.1:6379[8]> watch testexecok
OK
127.0.0.1:6379[8]> multi
OK
127.0.0.1:6379[8]> set testexecok "exec OK"
QUEUED
127.0.0.1:6379[8]> exec
1) OK


5、unwatch命令-取消watch命令对所有key的监视

unwatch命令用于取消watch命令对所有key的监视

语法:

unwatch


版本:2.2.0及以上

返回值:总是ok
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: