面试题答案
一键面试Redis单个命令原子性原理
Redis是基于单线程模型执行命令的。在执行命令时,从客户端发送命令请求到Redis服务器接收、解析、执行命令,这个过程是不会被其他命令打断的。因为只有一个线程在处理命令,不存在多个命令并行执行导致相互干扰的情况,所以保证了单个命令的原子性,要么命令完整执行,要么不执行,不会出现执行到一半的情况。
Redis事务相关命令作用及使用场景
- MULTI
- 作用:用于开启一个事务,它会将后续的命令放入一个队列中,而不是立即执行这些命令。
- 使用场景:当需要执行一组相关操作,希望这些操作要么全部成功,要么全部失败时,在开始这些操作前使用
MULTI
开启事务。例如在银行转账场景中,从一个账户扣款和向另一个账户加款这两个操作需要作为一个整体执行,就可以在这两个操作前使用MULTI
。
- EXEC
- 作用:执行
MULTI
之后入队的所有命令。Redis会顺序执行队列中的命令,并将所有命令的执行结果返回。如果在执行EXEC
前,有语法错误的命令入队,那么整个事务将不会执行。 - 使用场景:在
MULTI
开启事务并将相关命令入队后,使用EXEC
来触发事务的执行,确保一组操作的原子性执行。
- 作用:执行
- DISCARD
- 作用:取消事务,清空
MULTI
之后入队的所有命令。它会放弃当前事务块内的所有待执行命令,将事务状态恢复到开启前。 - 使用场景:当在事务开启后,根据某些条件判断发现不需要执行后续命令时,可使用
DISCARD
取消事务。比如在进行一系列库存操作的事务中,发现库存不足,此时可以使用DISCARD
取消事务,避免错误的库存操作。
- 作用:取消事务,清空