可靠的分布式锁和应用场景

9/14/2022

分布式锁,是分布式场景基本操作,是必须完全掌握的东西。

关于分布式锁相关的文章已经很多了,随便一个都讲得很清楚。

比如:https://mp.weixin.qq.com/s/xZAPAPQprXTSScoCvGkO4Q (opens new window)

一般分布式锁风险点在于:

  • 规避死锁,Redis锁超时和抢锁操作必须是原子的
  • 规避锁误删除,Redis 解锁要用Lua去检查,保证检查和删除操作是原子的
  • Redis 分布式锁可以通过 RedLock 规避单机风险

# 其他

# 1.是否需要重入锁

Redission 通过 Lua 支持了可重入锁。

然而重入锁一般是不需要。

如果需要用到重入锁,一般是设计不合理,可以尝试更优化的设计。

# 2.控制锁粒度

假如多个请求要同时修改用户信息,为了防止数据被写花需要抢锁。

常规情况是根据 uid 加锁。

但是其实可以把粒度调小:

  • 修改昵称的只加 uid 昵称锁
  • 修改手机号可以只加手机号锁

# 3.脚本抢锁要注意锁过期

执行脚本一般时间会比较长,不可控因素更多,因此更容易遇到锁过期。

比较好的办法是使用 zookeeper 或者使用 Redission 的 watchdog 锁续期。