From 4360124178a0a7cf1e09234b5de53d38989c6616 Mon Sep 17 00:00:00 2001 From: 01Petard <1520394133@qq.com> Date: Thu, 14 Nov 2024 22:39:09 +0800 Subject: [PATCH] =?UTF-8?q?doc:=201=E3=80=81=E5=A4=87=E4=BB=BD=E6=96=87?= =?UTF-8?q?=E7=AB=A0=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... Java Guide - \347\274\223\345\255\230.md" | 41 ++++++++++++++++++- ...70\347\224\250\345\221\275\344\273\244.md" | 12 ++++-- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git "a/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - \347\274\223\345\255\230.md" "b/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - \347\274\223\345\255\230.md" index e99e987..c6c8cfe 100644 --- "a/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - \347\274\223\345\255\230.md" +++ "b/docs/\345\274\200\345\217\221/My Java Guide/My Java Guide - \347\274\223\345\255\230.md" @@ -727,8 +727,47 @@ Redis 集群引入了哈希槽的概念,有 16384 个哈希槽,集群中每 1. 锁被争用,是不公平的,使用时间戳机制实现公平锁。 2. 锁被删除时验证锁的所有者,使用 Lua 脚本或UUID检查并删除锁。 -## *Redisson的看门狗机制* +## Redisson的看门狗机制 **作用**:避免死锁。 **实现原理**:当锁住的一个业务还没有执行完成的时候,Redisson每隔一段时间就检查当前业务是否还持有锁,如果持有就增加加锁的持有时间,当业务执行完成之后需要使用释放锁就可以了。 + +# 红锁(Redlock) + +“红锁”(Redlock)是一种分布式锁算法,由Redis之父Salvatore Sanfilippo提出,**旨在解决在分布式环境中实现可靠锁的问题**。 + +传统的分布式锁实现方法可能在某些特定条件下(如网络分区、节点故障等)导致**锁的不可靠性**,而Redlock算法则试图通过一种更健壮的方式来解决这些问题。 + +## 应用场景 + +- **分布式系统**:在需要跨服务或跨进程去访问共享资源的场景中,Redlock算法可以提供一种**可靠的锁机制**。 +- **高并发环境**:在高并发环境下,Redlock算法可以帮助**避免因锁竞争而导致的性能瓶颈**。 + +## 红锁算法的实现步骤 + +1. **多节点部署**:Redlock算法要求至少有奇数(不低于5)个节点独立的Redis节点。这些节点之间相互独立,不依赖于彼此。 +2. **尝试获取锁**:客户端向每个节点申请锁,每个节点锁**使用相同的锁名称和相同的随机值(token)**。每个节点的锁设置一个小于锁的总有效期的超时时间。 +3. **多数节点同意**:如果客户端能够在**超过半数**的节点上成功获取锁,则认为锁获取成功。 +4. **计算实际等待时间,判断是否要放弃锁**:成功获取锁后,客户端计算在整个过程中花费的实际时间,包括网络延迟和锁请求的处理时间。如果这段时间超过了锁的有效期的一半,客户端应当放弃锁并重新尝试获取。 +5. **设置锁的有效期**:为了确保锁的有效性,设置锁的有效期 = 最初设置的锁有效期 - 实际等待时间。锁的有效期是从客户端开始“尝试”获取锁时算起的。 +6. **释放锁**:当不再需要锁时,客户端需要向所有节点发送释放锁的请求,确保锁被真正释放。 + +**优点**: + +- **高可用性**:通过多节点部署和多数派决策,提高了锁的可用性和可靠性。 +- **灵活性**:允许锁的有效期动态调整,以适应不同的网络条件和负载情况。 + +**缺点**: + +- **复杂度**:相比简单的基于单个Redis实例的锁实现,Redlock算法更为复杂,需要管理多个节点之间的协调。 +- **性能开销**:由于需要与多个节点交互,可能会引入额外的网络延迟和性能开销。 + +## 红锁在分布式锁方面的保证 + +Redlock算法通过**多节点部署**和**多数派决策机制**,显著提高了分布式锁的可靠性和高可用性。它**有效地防止了因单点故障或网络问题导致的多个线程同时获取同一把锁的情况**,从而确保了系统的稳定性和数据的一致性。 + +因为每个节点锁**都会使用使用相同的锁名称和相同的随机值(token)**,因此其他线程重复获取同一把锁是不可能成功的,从而就保证了分布式锁的可靠性。 + + + diff --git "a/docs/\350\275\257\344\273\266/MacOS/Homebrew\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/docs/\350\275\257\344\273\266/MacOS/Homebrew\345\270\270\347\224\250\345\221\275\344\273\244.md" index ab60a34..7ef0938 100644 --- "a/docs/\350\275\257\344\273\266/MacOS/Homebrew\345\270\270\347\224\250\345\221\275\344\273\244.md" +++ "b/docs/\350\275\257\344\273\266/MacOS/Homebrew\345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -13,23 +13,29 @@ cover: http://n.sinaimg.cn/sinakd202126s/506/w840h466/20210206/2eff-kirmaiu51187 top_img: https://i.ytimg.com/vi/N-SDrN4G4lE/maxresdefault.jpg --- -### 安装: +### 安装Homebrew ```shell /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" ``` -### 卸载: +### 卸载Homebrew ```shell /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" ``` -### 常用命令: +### 常用Homebrew命令 安装软件:`brew install xxx` + 卸载软件:`brew uninstall xxx` + 搜索软件:`brew search xxx` + 更新软件:`brew upgrade xxx` + 查看列表:`brew list` + 更新brew:`brew update` +