上篇文章,学习了Redis进行持久化以及复制相关问题,继续学习,了解Redis的事务相关处理。

事务

在不同的客户请求中,如何保证数据正确性,顺带要提升性能?

对于传统的数据库,做事务,我们先告诉DB,要开始一个事务Begin,然后执行批量的读写操作,最后提交事务Commit,使这些状态变化是永久性的,要不全部回滚。

对于Redis,开始“事务”使用MULTI命令,然后传递多个命令,最后跟上EXEC命令。这个过程中,我们需要等待EXEC命令调用,才真正做事,中间过程,不能做其他操作。(有点像延时执行命令)。这样处理的好处,是提升性能,减少网络负载(客户端和服务器交互)。缺点是中间过程不够灵活。

命令

WATCH,MULTI,EXEC,UNWATCH,DISCARD
WATCH,标记所有指定的key被监视起来,在事务中有条件的执行(乐观锁),我们使用WATCH命令后,其他客户来更新这些key时,会报错。这样确保,我们在做一些更新操作时,数据不会被串改。
UNWATCH,取消事务命令。
DISCARD,丢弃MULTI之后发出的命令。
EXEC,执行批量命令。

这里有悲观锁的介绍。
这里有乐观锁的介绍。类似Java的AQS的CAS特性。

性能测试

Redis基准测试,
redis-benchmark -c 1 -q

总结

简单介绍一下Redis中的“事务”。