欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

redis分布式鎖的go-redis實現(xiàn)方法詳解

 更新時間:2020年12月10日 10:19:54   作者:陶士涵  
這篇文章主要介紹了redis分布式鎖的go-redis實現(xiàn)方法,本文給大家介紹的非常詳細對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在分布式的業(yè)務(wù)中 , 如果有的共享資源需要安全的被訪問和處理 , 那就需要分布式鎖

分布式鎖的幾個原則;

1.「鎖的互斥性」:在分布式集群應(yīng)用中,共享資源的鎖在同一時間只能被一個對象獲取。

2. 「可重入」:為了避免死鎖,這把鎖是可以重入的,并且可以設(shè)置超時。

3. 「高效的加鎖和解鎖」:能夠高效的加鎖和解鎖,獲取鎖和釋放鎖的性能也好。

4. 「阻塞、公平」:可以根據(jù)業(yè)務(wù)的需要,考慮是使用阻塞、還是非阻塞,公平還是非公平的鎖。

redis實現(xiàn)分布式鎖主要靠setnx命令

1. 當key存在時失敗 , 保證互斥性

2.設(shè)置了超時 , 避免死鎖

3.利用mutex保證當前程序不存在并發(fā)沖突問題

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
}

到此這篇關(guān)于redis分布式鎖的go-redis實現(xiàn)方法的文章就介紹到這了,更多相關(guān)redis分布式鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis數(shù)據(jù)庫分布式設(shè)計方案介紹

    Redis數(shù)據(jù)庫分布式設(shè)計方案介紹

    大家好,本篇文章主要講的是Redis數(shù)據(jù)庫分布式設(shè)計方案介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Redis的持久化方式

    Redis的持久化方式

    Redis提供了兩種主要的持久化方式:RDB和AOF,RDB通過定時快照的方式保存數(shù)據(jù)狀態(tài),而AOF記錄每個寫操作以便于重啟時重放,兩者可以結(jié)合使用,且在重啟時AOF文件會被優(yōu)先用于數(shù)據(jù)恢復(fù),RDB快照具有速度快、節(jié)省磁盤空間的優(yōu)點,但可能會丟失最近的數(shù)據(jù)
    2024-10-10
  • Redis實現(xiàn)數(shù)據(jù)的交集、并集、補集的示例

    Redis實現(xiàn)數(shù)據(jù)的交集、并集、補集的示例

    本文主要介紹了Redis實現(xiàn)數(shù)據(jù)的交集、并集、補集的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Redis源碼分析之set?和?sorted?set?使用

    Redis源碼分析之set?和?sorted?set?使用

    本文介紹了Redis?中的?set?和?sorted?set?使用源碼實現(xiàn)分析,Redis?的?Set?是?String?類型的無序集合,集合成員是唯一的,sorted?set有序集合和集合一樣也是?string?類型元素的集合,對Redis?set?和?sorted?set使用相關(guān)知識感興趣的朋友一起看看吧
    2022-03-03
  • Redis數(shù)據(jù)結(jié)構(gòu)之intset整數(shù)集合使用學(xué)習(xí)

    Redis數(shù)據(jù)結(jié)構(gòu)之intset整數(shù)集合使用學(xué)習(xí)

    這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)之整數(shù)集合使用學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Redis開啟鍵空間通知實現(xiàn)超時通知的步驟詳解

    Redis開啟鍵空間通知實現(xiàn)超時通知的步驟詳解

    這篇文章主要介紹了Redis開啟鍵空間通知實現(xiàn)超時通知的步驟,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • phpredis提高消息隊列的實時性方法(推薦)

    phpredis提高消息隊列的實時性方法(推薦)

    下面小編就為大家?guī)硪黄猵hpredis提高消息隊列的實時性方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Redis字符串對象實用筆記

    Redis字符串對象實用筆記

    這篇文章主要給大家介紹了關(guān)于Redis字符串對象的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Redis實現(xiàn)多人多聊天室功能

    Redis實現(xiàn)多人多聊天室功能

    這篇文章主要為大家詳細介紹了Redis實現(xiàn)多人多聊天室功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • redis和redisson實現(xiàn)分布式鎖的操作方法

    redis和redisson實現(xiàn)分布式鎖的操作方法

    使用 Redis 實現(xiàn)分布式鎖,最直接的想法是利用 setnx 和 expire 命令實現(xiàn)加鎖,這篇文章主要介紹了redis和redisson實現(xiàn)分布式鎖的操作方法,需要的朋友可以參考下
    2024-03-03

最新評論