Golang基于redis实现的分布式信号量(semaphore)
来源:互联网 发布:网络招标 编辑:程序博客网 时间:2024/05/22 05:00
前言
Semaphore是信号量,作用? 我想大家都知道。semaphore跟mutex的区别我想大家也知道了,我这里就不老生常谈,重复讲解了,有兴趣的朋友可以自行google相关的同步锁文章。
像semaphore,mutex 可以支持多线程,也可以是多进程。但如果是在分布式集群环境想实现类似 semaphore的东西怎么做? 我们可以借助redis来实现, 我这里用了redis的hash、list、string实现的网络信号量。 利用redis hash存token的时间,list用来实现堵塞及非阻塞模式,利用redis string的setnx来实现分布式锁,锁的目的是用来原子性写一致。
该项目是使用golang写的,再具体代码就不详细描述了,有兴趣的可以直接看代码。
github的项目地址:
https://github.com/rfyiamcool/go_redis_semaphore
用法
limiter := go_redis_semaphore.NewRedisSemaphore(redis连接池对象, 信号量数目, "redis key的名字")// 初始化redislimiter.Init()// 非阻塞拿锁token, _ := limiter.Acquire(0)// 超时5s阻塞拿锁token, _ := limiter.Acquire(5)// 释放锁limiter.Release(token)
具体例子
package main// xiaorui.ccimport ("fmt""github.com/rfyiamcool/go_redis_semaphore")func main() {fmt.Println("实例化redis连接池")redis_client_config := go_redis_semaphore.RedisConfType{RedisPw: "",RedisHost: "127.0.0.1:6379",RedisDb: 0,RedisMaxActive: 100,RedisMaxIdle: 100,RedisIdleTimeOut: 1000,}redis_client := go_redis_semaphore.NewRedisPool(redis_client_config)fmt.Println("实例化 redis Semaphore")limiter := go_redis_semaphore.NewRedisSemaphore(redis_client, 2, "love")limiter.Init()fmt.Println("非阻塞拿锁")token, _ := limiter.Acquire(0)fmt.Println("释放锁")limiter.Release(token)fmt.Println(limiter.ScanTimeoutToken())fmt.Println("end")}
END.
阅读全文
0 0
- Golang基于redis实现的分布式信号量(semaphore)
- 基于Consul的分布式信号量实现
- 剖析基于并发AQS的共享锁的实现(基于信号量Semaphore)
- .Net下信号量(Semaphore)的一种实现
- c++11中信号量(semaphore)的实现
- 多线程之实现同步的信号量Semaphore
- 基于redis的分布式锁的实现
- 基于redis的分布式锁的实现
- 基于Redis的分布式锁实现
- 基于Redis的分布式锁实现方式
- Java实现基于Redis的分布式锁
- Java实现基于Redis的分布式锁
- Java实现基于Redis的分布式锁
- Java实现基于Redis的分布式锁
- Java 实现基于Redis的分布式可重入锁
- Java 实现基于Redis的分布式可重入锁
- 基于redis实现可靠的分布式锁
- 基于Redis实现简单的分布式锁
- My route on python and MachineLearning
- pycharm激活(JetBrains IDEA 系列产品通用xx方法)
- 系统权限官网知识点
- Intellij idea破解2017
- 每日一记:2017.12.16
- Golang基于redis实现的分布式信号量(semaphore)
- vue基础案例2
- tablayout+viewpager联动
- 【回顾】协同·组织管理新时代——致远互联执行总裁向奇汉
- 投资收购微盟、博易智软后,要做中国Salesforce+ Palantir的天马股份再发智能商业π型战略
- java8学习总结——Collectors类源代码分析
- 给个n,求1到n的所有数的约数个数的和~
- 吴恩达联手富士康打造AI技术 | 京东云与百分点达成战略合作 | 外媒认为比特币疯涨的幕后推手是日本人
- 使用Easy UI进行页面的简单布局