认识
一、认识
分布式锁 是在分布式系统中用于同步多个进程或线程对共享资源的访问,确保同一时间只有一个进程能够修改资源,防止数据不一致或竞争条件。分布式锁的特性 的特性: 互斥性, 同一时间只能有一个客户端获取锁; 防死锁, 锁必须具备过期时间,防止锁持有者异常退出后无法释放; 高可用性, 锁服务必须在分布式环境下运行,具备容错能力; 可重入性(可选):同一个客户端可以多次获取同一把锁,而不会导致死锁。
使用分布式锁的最佳实践: 设置合适的超时时间, 确保锁不会永久持有,避免死锁; 使用唯一标识, 确保释放锁时匹配正确的持有者; 使用 Lua
脚本进行释放, 原子操作,确保数据一致性; 尽量减少锁持有时间, 提高系统吞吐量; 监控锁的使用情况, 避免异常导致业务影响;
分布式锁 通常在以下场景中应用:
-
订单并发场景, 防止超卖: 比如电商秒杀抢购, 促销活动库存控制。在电商系统中,用户可能会同时下单,导致库存被超卖,造成数据不一致。在扣减库存时使用
Redis
分布式锁,确保同一时间只有一个请求能够扣减库存。 -
任务调度:防止重复执行: 在分布式环境下,可能会有多个实例同时执行同一任务,导致重复执行。使用分布式锁确保任务在同一时间只能执行一次。
-
防止重复请求:用户并发操作: 用户在前端多次点击提交按钮,可能会导致重复请求,产生重复数据。在提交时使用
Redis
锁来防止重复提交。 -
分布式事务:保证一致性: 在分布式环境下,多个服务可能需要同时修改同一资源,如扣减余额并更新订单。使用
Redis
锁来确保多个服务间的操作一致性。 -
缓存一致性:防止并发更新: 多个服务器同时更新缓存,可能会导致数据不一致。使用分布式锁确保数据更新的原子性。
-
分布式爬虫:防止重复抓取: 在分布式爬虫环境中,多个爬虫可能会重复抓取同一页面,造成资源浪费。使用分布式锁确保每个
URL
仅被抓取一次。