龙空技术网

分布式锁应用场景

liferunon 265

前言:

现时朋友们对“分布式锁的使用场景”大约比较珍视,兄弟们都想要知道一些“分布式锁的使用场景”的相关内容。那么小编也在网络上网罗了一些对于“分布式锁的使用场景””的相关文章,希望兄弟们能喜欢,看官们快快来了解一下吧!

分布式锁

和单机一样,在需要并发处理数据时需要考虑使用。

实现方式:(Db方式,redis方式,zookeeper方式)。

1.保护数据,对写操作加锁。用于解决写少,读多问题。

(1)秒杀库存加锁,防止超卖。多个请求并行,会导致get,set少扣。

(2)表单重复提交。用户短期多次点击或上一次未结束可以认为是同一个操作,这样,无需后台db处理该请求。

(3)接口幂等处理。对于已经成功执行的数据,再次发起请求,直接返回成功。

2.保护后台系统。

(1)击穿。可用分布式锁保护db,针对某key更新,则同一时刻只有一个操作db查询。

(2)避免重复处理数据。调度任务在多台机器重复执行,检测到有锁,则放弃。

分布式锁实现五要素

(1)锁的创建和释放: 将用来竞争的资源名称设置为唯一key。 获取锁的时候,就插入一条记录。插入成功就代表获取到锁,插入失败就代表获取锁失败。 释放锁的时候,就删除这条记录。

(2)支持阻塞和非阻塞: 可以用while循环直到插入成功,不过自旋也会占用CPU。

(3)支持可重入: 使用锁持有者owner和加锁次数字段lock_count实现可重入: 获取锁,次数加一,释放锁,次数减一,次数为零就删除这把锁。

(4)支持过期时间 使用过期时间expire_time字段,通过异步任务检测避免因程序异常或机器宕机导致锁无法释放。

(5)支持锁续期 获取锁的同时,启动一个异步任务,每当业务执行到三分之一时间,也就是6秒中的第2秒的时候,就自动延长锁过期时间,继续延长到6秒,这样就能保证业务逻辑处理完成之前锁不会过期。

孜孜不倦,每日一学

标签: #分布式锁的使用场景