在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:disgo开源软件地址:https://gitee.com/musclechen/disgo开源软件介绍:English | 中文 DisGo 简介DisGo是一个基于Redis的分布式锁,采用Golang语言开发。该名字源于 DisGo拥有的特性可重入锁DisGo是一个可重入锁,使用Redis的Hash类型作为锁,hash-name为锁名,hash-key存放的是当前持锁线程的唯一id,hash-value存放的是当前加锁次数。 公平锁Golang本身没有线程安全的队列可以使用,为了方便,DisGo使用Redis的ZSet模拟队列,一定程度上保证了先进先出,提供了公平抢锁机制。 自动续期DisGo提供自动续期功能,防止业务没有执行完,锁却提前释放导致的数据错误。 自旋抢锁DisGo提供自旋抢锁,在设定的等待时间内将会自动重试抢锁,直到抢到锁或者等待超时。 更加高效DisGo使用了Redis的发布订阅,在锁释放的第一时间会收到消息,然后根据等待队列的顺序执行加锁。 DisGo的加锁流程点击我DisGo的API介绍获取锁对象 redisClient := redis.NewClient(&redis.Options{ Network: "tcp", Addr: "127.0.0.1:6379", }) lock, err := disgo.GetLock(redisClient, "test") 普通加锁(不需要自动续期) success, err := lock.Lock(ctx, 5*time.Second, 10*time.Second) 自旋加锁(不需要自动续期) success, err := lock.TryLock(ctx, 5*time.Second, 10*time.Second) 自旋加锁(自动续期) success, err := lock.TryLockWithSchedule(ctx, 5*time.Second) 解锁(通用) success, err := lock.Release(ctx) |
请发表评论