面试题答案
一键面试常用锁机制及适用场景
- 表锁
- 概述:对整个表进行锁定,开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
- 适用场景:
- 读操作远多于写操作的场景,例如一些统计类的报表生成,在生成报表过程中,对整个表进行读取操作,使用表锁可简单快速地锁定表,避免其他写操作干扰。
- 执行全表扫描的操作,比如批量删除数据等,使用表锁可保证操作过程中表数据的一致性。
- 行锁
- 概述:只锁定需要操作的行数据,锁定粒度最小,发生锁冲突的概率最低,并发度最高;但开销大,加锁慢,且容易出现死锁。
- 适用场景:
- 高并发的读写场景,比如电商的库存扣减,不同的订单可能操作不同的库存行数据,使用行锁可以只锁定对应的库存行,而不影响其他库存行的操作,提高并发处理能力。
- 对数据一致性要求高且写操作频繁的场景,例如银行转账业务,每次转账只涉及特定的账户行数据,行锁可保证操作的原子性和数据一致性。
- 页锁
- 概述:锁定的粒度介于表锁和行锁之间,一次锁定相邻的一组记录。开销和加锁时间介于表锁和行锁之间;会出现死锁;锁定粒度也介于两者之间,并发度一般。
- 适用场景:
- 某些场景下,数据按页组织,且对页内数据的操作频率较高,如数据仓库中的一些按页存储和处理的数据,页锁可以在一定程度上平衡并发和锁开销。
- 对于一些中等并发度的场景,既希望比表锁有更高的并发度,又不想像行锁那样有较大的开销和死锁风险,页锁可作为一种选择。