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