# 《Seckill秒杀系统》第30章:分布式锁通用代码设计与实现

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
课程视频:https://t.zsxq.com/12pv5HXCc (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★★☆☆
  • 本章重点:基于Redisson实现分布式锁的通用代码设计,使代码满足需求的同时,兼具优雅性,并具备良好的性能与扩展性。
  • 课程视频:https://t.zsxq.com/12pv5HXCc (opens new window)

大家好,我是冰河~~

编写优雅且兼具扩展性与性能的代码需要具备扎实的编程功底,但这也是对一个程序员最基本的要求。优雅且兼具扩展性与性能的代码不仅让人看上去比较舒服,并且其良好的扩展性有助于后期的维护和升级,记得雷布斯曾经说过:我不是诗人,但我写的代码像诗一样优雅。

# 一、前言

在某种程度上,代码能够反映出一个程序员的编程功底,甚至是一个程序员的技术水平。能够编写优雅且兼具扩展性与性能代码的程序员比只顾CRUD,只会造“屎山”的程序员更受企业欢迎,所以,作为程序员的我们平时就需要培养自身扎实的编程功底和良好的代码编写能力。

# 二、本章诉求

如果一个单体应用系统中某些关键业务只能让一个线程执行,此时可以使用synchronized锁或者Lock锁实现。但是synchronized锁或者Lock锁只能解决单体应用系统下线程的互斥问题,在分布式系统场景下,synchronized锁或者Lock锁就显得力不从心了,此时,就需要使用分布式锁来解决相应的问题。

本章,就从代码层面基于Redisson实现具备良好扩展性的分布式锁。

# 三、代码设计

在设计分布式锁的代码时,将会从代码场景、代码扩展性和代码类结构等方面进行详细的说明。

# 3.1 代码场景设计

如果分布式系统中存在受保护的临界区资源,并且在同一时刻只能有一个线程对这些临界区资源进行变更操作,在这种场景下,Java中提供的synchronized锁或者Lock锁是无能为力的,此时就需要使用分布式锁来解决相应的问题。在分布式场景下,无论存在多少个应用服务,亦或是存在多少个系统实例,只要是这些应用服务或者系统实例需要互斥的更新临界区资源,使用分布式锁都能够实现在同一时刻只能有一个线程变更临界区资源,如图30-1所示。


可以看到,在分布式场景下,对临界区资源进行变更时,使用分布式锁能够实现在同一时刻只能有一个线程变更临界区资源,此时,变更临界区资源是线程安全的,不会由于多个线程同时变更临界区资源而造成线程安全的问题。

# 3.2 代码扩展性设计

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码