redis事务及命令

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

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