面试题答案
一键面试1. 数据一致性保证
- 单线程执行:Redis 是单线程模型,所有客户端的命令包括事务操作都是顺序执行。当多个客户端同时提交事务时,Redis 会将这些事务请求放入队列,按顺序逐个执行。这就避免了并发执行导致的数据竞争问题,确保每个事务内的命令按顺序原子性执行,从而保证数据一致性。例如,一个事务对某个 key 进行多次操作,不会在操作过程中被其他客户端干扰。
- WATCH 机制:客户端可以使用
WATCH
命令监控一个或多个 key。在执行MULTI
开启事务之前,如果被监控的 key 在其他客户端被修改,当前客户端的事务会被打断,不会执行EXEC
后的命令。比如,客户端 A 监控了 key1,在 A 开启事务但未执行EXEC
时,客户端 B 修改了 key1,那么 A 的事务会失败,这样可以防止数据在事务执行过程中被意外修改,维护数据一致性。
2. 并发性能
- 批量操作:事务允许将多个命令打包成一个操作发送到服务器端。客户端可以通过一次网络请求发送多个命令,减少了网络开销。例如,原本需要多次网络交互执行的多个命令,在事务中只需一次请求,提高了并发场景下的整体性能。
- 乐观锁机制(基于 WATCH):
WATCH
机制采用乐观锁策略。在事务开始前监控数据,假设在事务执行过程中数据不会被修改,只有在执行EXEC
时才检查数据是否被修改。相比悲观锁(如数据库中的锁表等操作),乐观锁在大多数情况下不需要等待锁,减少了等待时间,提高了并发性能。
3. 关键机制
- MULTI/EXEC:
MULTI
命令用于开启一个事务,告诉 Redis 后续命令进入事务队列;EXEC
命令用于执行事务队列中的所有命令。在MULTI
到EXEC
之间的命令不会立即执行,而是缓存起来,直到EXEC
触发批量执行。 - DISCARD:用于取消事务,清除事务队列中的所有命令,事务状态回滚到开启前。
- WATCH:如上述所说,用于监控 key,保证事务执行过程中数据的一致性,实现乐观锁机制。