IT袋

当前位置:主页 > 经验教程 > 建站编程 >

手动实现一个Redis分布式锁

手动实现一个Redis分布式锁 手工创建一个Redis分布式锁(3)

时间:2024-02-22 18:37:55 来源:IT袋 作者:马勇
导读:手动实现一个Redis分布式锁,最后起个 10 个多线程,去执行这个 DoProcess(): func main() { // 初始化资源 var group string = "group" var name string = "name" var host string // 初始化资源 host = "http://ip:

手动实现一个Redis分布式锁

最后起个 10 个多线程,去执行这个 DoProcess():

func main() {
 // 初始化资源
 var group string = "group"
 var name string = "name"
 var host string
 // 初始化资源
 host = "http://ip:port"
 _, err := xrpc.NewXRpcDefault(group, name, host)
 if err != nil {
  panic(fmt.Sprintf("initRpc when init rpc  failed, err:%v", err))
 }
 redis.SetRedis("louzai", "redis_louzai")
 // 开启10个线程,去抢Redis分布式锁
 for i := 0; i <= 9; i ++ {
  go DoProcess(i)
 }
 // 避免子线程退出,主线程睡一会
 time.Sleep(time.Second * 100)
 return
}

程序跑了100 s,我们可以看到,每次都只有 1 个线程获取到锁,分别是 2、1、5、9、3,执行结果如下:

启动第0个线程
启动第6个线程
启动第9个线程
启动第4个线程
启动第5个线程
启动第2个线程
启动第1个线程
启动第8个线程
启动第7个线程
启动第3个线程
Get Redis Key Success, id:2
Get Redis Key Success, id:2
Get Redis Key Success, id:1
Get Redis Key Success, id:5
Get Redis Key Success, id:5
Get Redis Key Success, id:5
Get Redis Key Success, id:5
Get Redis Key Success, id:5
Get Redis Key Success, id:5
Get Redis Key Success, id:5
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:9
Get Redis Key Success, id:3
Get Redis Key Success, id:3
Get Redis Key Success, id:3
Get Redis Key Success, id:3
Get Redis Key Success, id:3

4、后记

这个代码,其实是我很久之前写的,因为当时 Go 没有开源的分布式锁,但是我又需要通过单机去执行某个任务,所以就自己手动撸了一个,后来在线上跑了 2 年,一直都没有问题。

不过期间也遇到过一个坑,就是我们服务迁移时,忘了将旧机器的分布式锁停掉,导致锁经常被旧机器抢占,当时觉得很奇怪,我的锁呢?

写这篇文章时,又让我想到当时工作的场景。

最后再切回正题,本文由浅入深,详细讲解了 Redis 实现的详细过程,以及锁超时、并发场景下,如何保证锁能正常释放,且只有一个线程去获取锁。

上述就是手动实现一个Redis分布式锁的全部内容,网友们不妨在这方面予以借鉴

相关阅读

  • 广域网 WAN的主要特点是什么

    广域网 WAN的主要特点是什么

    如果想知道的相关介绍,接下来IT袋网小编为大家介绍。 广域网(Wide Area Network)跨越更大的地理区域,通常连接不同城市、国家甚至大洲的设备。 特点 广泛范围: WAN的范围非常广泛,可以连

  • 数据库中的acid是什么意思

    数据库中的acid是什么意思

    对于许多网友来说数据库中的acid是什么意思的相关话题,接下来IT袋网小编为大家介绍。 我们说到数据库的时候,常常提到其 ACID 属性。那么 ACID 是什么意思呢? ACID 是用来 描述数据库事务

  • 5G-Advanced优势有哪些

    5G-Advanced优势有哪些

    关于这方面的知识你知道吗?5G-Advanced优势有哪些的电脑小知识,下面为详细的介绍。 容量提升与速度飞跃 5G Advanced将继续挑战7 GHz以下和毫米波频谱的频谱效率限制。通过不断优化MIMO技术,

  • GPU是什么:GPU的基础知识与应用领域

    GPU是什么:GPU的基础知识与应用领域

    跟大家聊一聊GPU是什么的相关介绍,下面小编为您详细解答 1. GPU的基本概念 GPU(Graphics Processing Unit),中文名为图形处理器,是计算机中负责处理图形和图像运算的硬件设备。 在现代计算机