atomic Operation
所有Redis的命令都是原子操作,例如: INCR
redis的事务
redis事务是一组命令的集合,基本原理是,先将属于一个事务的命令发送给redis,然后让redis依次执行每一条命令。例如:
> multi
> sadd "user:1:following" 1
> sadd "user:2:followers" 2
> exec
redis的事务还可以保证在事务内的命令依次执行而不被其他命令插入。
redis的事务 - watch
如果在一组操作中,需要首先get出结果,然后再set新值。在并发的情况下,如何保证get出来的值不被其他客户端修改,直到整个操作结束才允许其他客户端修改该键。
watch,用于在事务操作之前,首先监控一个或多个键,一旦在事务执行过程中,有一个键被修改(或者删除),之后的事务就不会执行。watch的监控直到事务exec命令结束。
watch也可以和unwatch组合使用,例如:
def hsetxx($key, $field, $value)
WATCH $key
$isFieldExists = HEXISTS $key, $field
if $isFieldExists is 1
MULTI
HSET $key, $field, $value
EXEC
else
UNWATCH
return $isFieldExists