Redis主要是针对单个key,或者说,单个数据对象的操作,这样,事务里的多对象Atomic要求就很低。当Redis的命令执行多对象操作,比如MSET命令,或者Redis的Transaction命令(也含LUA),涉及多数据对象时,其内部,是顺序执行的。
一、redis似乎并没有“事务”,那些用到“事务”的人在做什么
Redis主要是针对单个key,或者说,单个数据对象的操作,这样,事务里的多对象Atomic要求就很低。
当Redis的命令执行多对象操作,比如MSET命令,或者Redis的Transaction命令(也含LUA),涉及多数据对象时,其内部,是顺序执行的(这也是我们说的,Redis是单线程架构),相当于传统DB的Serialize级别。这时,ACID里的Isolation在Redis里就极其简化,因为不存在两个并发事务互相的干扰,即Redis不存在并发命令。
Redis的Transaction命令,不是严格意义的事务,因为缺乏Rollback。
磁盘的AOF或RDB文件,只是个备份,不是传统意义上的DB的Dataset包含磁盘数据的概念,所以,把Redis的磁盘数据,看成整个Dataset的一部分,是不对的,还是只考虑Redis的内存特性,即它是内存数据库。
Redis 只是提供了简单的事务功能。其本质是一组命令的集合,事务支持一次执行多个命令,在事务执行过程中,会顺序执行队列中的命令,其他客户端提交的命令请求不会插入到本事务执行命令序列中。命令的执行过程是顺序执行的,但不能保证原子性。无法像 MySQL 那样,有隔离级别,出了问题之后还能回滚数据等高级操作。
延伸阅读:
二、Redis事务的应用场景
在分布式系统和高并发场景下,事务处理具有重要意义。Redis事务可以确保数据的一致性,避免并发操作导致的数据不一致问题。以下是一些Redis事务的应用场景:
- 批量操作:Redis 事务可以将多个命令打包成一个单元来执行,可以减少与 Redis 服务器的通信次数,从而提高性能。
- 数据库迁移:在迁移数据时,需要保证数据一致性。通过Redis事务,可以确保数据在迁移过程中不会出现不一致的情况。
- 分布式锁:在分布式系统中,为了保证数据的一致性,需要实现分布式锁。通过Redis事务,可以在同一个事务中执行锁定、解锁等操作,确保锁的原子性。
这些应用场景展示了Redis事务在实际应用中的价值。接下来,我们将详细介绍Redis事务的基本命令、特性和实现原理。