相关命令:
MULTI, EXEC, WATCH, UNWATCH
Redis事务与传统关系型数据库事务的区别:
在关系型数据库中, 用户首先向数据库发送BEGIN,然后执行各个相互一致的写操作和读操作,最后用户可以选择发送COMMIT来确认之前的操作,或者发送ROLLBACK来放弃之前的操作。
Redis的事务以特殊命令MULTI为开始,之后跟着用户传入的多个命令,最后以EXEC结束。但是由于这种简单的事务在EXEC被调用之前不会执行任何实际操作,所以用户将没有办法根据读取到的数据来做决定。
Redis在执行事务的过程中,会延迟执行已入队的命令直到客户端发送EXEC命令为止。这种“一次性发送多个命令,然后等待所有回复出现”的做法叫做“流水线”, 它可以通过减少客户端与Redis服务器之间的网络通信次数来提升执行多个命令时的性能。
为什么Redis没有实现典型的加锁功能?
传统关系型数据库加锁功能的缺点在于:持有锁的客户端执行越慢,其他等待的客户端被阻塞的时间就越长。
Redis为了避免客户端的长时间等待,并不会在执行WATCH命令时为数据加锁。只会在数据已经被其他客户端抢先修改的情况下通知执行了WATCH命令的客户端,这种方式被称为乐观锁,而关系型数据库执行的加锁操作被称为悲观锁。