Redis事务,Redis事务处理
Redis事务以及事务的处理方式,Redis的事务教程将在本篇讲解。事务功能在数据完整性和数据一致性发挥着不可或缺的巨大的作用。Redis数据库为我们提供了不那么完美的Redis事务功能和Redis事务操作。为什么提供了事务缺说不那么完美呢?本篇是Redis事务教程之入门篇。
事务也是Redis的最小执行单位,是原子的,不怕高并发下的竞态条件。一个事务的多条命令语句要么都执行,要么都不执行。事务的应用也非常广泛。Redis事务的原理是先将一个事务命令发送给Redis,然后再让Redis一次执行这些命令。 如:
redis>MULTI OK redis>SADD user:10002:friendId 10001 QUEUE redis>SADD user:10001:friendId 10002 QUEUE redis>EXEC 1)integer 1 2)integer 1
MULT告诉Redis开始一个事务,EXEC告诉Redis执行一个事务。中间两条SADD是属于同一个事务的语句。返回结果是第一条结果1,第二条语句结果1。如果,两条语句语法错误呢?
redis>MULTI OK redis>SADD user:10002:friendId 10001 QUEUE redis>SADDDDDD user:10001:friendId 10002 ERR unknown command ‘SADDDDD’ redis>EXEC ERROR..............
如果语法错误,在录入Redis事务的过程中,Redis就会发现,并提示错误,在EXEC之后,仍然会返回错误提示,两条Redis事务的语句都不会被执行。可是,如果语法没有错误,可是在执行的时候却发生了错误呢?比如用SADD(集合类型的操作)去操作一个字符串数据类型的key呢?
redis>MULTI OK redis>SET num 1 QUEUE redis>SADD num 2 QUEUE redis>EXEC 1)integer 1 2)ERR ....................
可以看到,如果用集合类型的操作命令去操作字符串类型的key的话,第一条语句是正常执行并返回1.第二条语句却报错了。如果GET num可以的得到结果是1。也就是说即使有一条语句错误,但是第一条是执行成功了。这就是Redis提供了Redis事务机制,但是在操作中,不完美地方,Redis事务操作不提供所谓的回滚。
不过Redis却提供了一个新的办法,叫做WATCH命令。生病了,坐不住了。关于WATCH的内容下篇写。。