主页 > 知识库 > redis分布式锁的go-redis实现方法详解

redis分布式锁的go-redis实现方法详解

热门标签:山东外呼销售系统招商 超呼电话机器人 北京400电话办理收费标准 贵州电销卡外呼系统 郑州人工智能电销机器人系统 魔兽2青云地图标注 宿迁便宜外呼系统平台 十堰营销电销机器人哪家便宜 日本中国地图标注

在分布式的业务中 , 如果有的共享资源需要安全的被访问和处理 , 那就需要分布式锁

分布式锁的几个原则;

1.「锁的互斥性」:在分布式集群应用中,共享资源的锁在同一时间只能被一个对象获取。

2. 「可重入」:为了避免死锁,这把锁是可以重入的,并且可以设置超时。

3. 「高效的加锁和解锁」:能够高效的加锁和解锁,获取锁和释放锁的性能也好。

4. 「阻塞、公平」:可以根据业务的需要,考虑是使用阻塞、还是非阻塞,公平还是非公平的锁。

redis实现分布式锁主要靠setnx命令

1. 当key存在时失败 , 保证互斥性

2.设置了超时 , 避免死锁

3.利用mutex保证当前程序不存在并发冲突问题

package redis

import (
 "context"
 "github.com/go-redis/redis/v8"
 "github.com/taoshihan1991/miaosha/setting"
 "log"
 "sync"
 "time"
)

var rdb *redis.Client
var ctx = context.Background()
var mutex sync.Mutex

func NewRedis() {
 rdb = redis.NewClient(redis.Options{
  Addr:  setting.Redis.Ip + ":" + setting.Redis.Port,
  Password: "", // no password set
  DB:  0, // use default DB
 })
}
func Lock(key string) bool {
 mutex.Lock()
 defer mutex.Unlock()
 bool, err := rdb.SetNX(ctx, key, 1, 10*time.Second).Result()
 if err != nil {
  log.Println(err.Error())
 }
 return bool
}
func UnLock(key string) int64 {
 nums, err := rdb.Del(ctx, key).Result()
 if err != nil {
  log.Println(err.Error())
  return 0
 }
 return nums
}

到此这篇关于redis分布式锁的go-redis实现方法的文章就介绍到这了,更多相关redis分布式锁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • 详解一种用django_cache实现分布式锁的方式
  • go如何利用orm简单实现接口分布式锁
  • mongo分布式锁Java实现方法(推荐)
  • 浅谈Redis分布式锁的正确实现方式
  • Java使用Redisson分布式锁实现原理
  • Redis Template实现分布式锁的实例代码
  • Go 语言下基于Redis分布式锁的实现方式

标签:果洛 杨凌 江苏 北京 吉安 大庆 台州 朝阳

巨人网络通讯声明:本文标题《redis分布式锁的go-redis实现方法详解》,本文关键词  redis,分布式,锁,的,go-redis,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《redis分布式锁的go-redis实现方法详解》相关的同类信息!
  • 本页收集关于redis分布式锁的go-redis实现方法详解的相关信息资讯供网民参考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推荐文章