Go学习 Day20 分布式原语之分布式锁

67 阅读1分钟

常用的分布式原语包括分布式锁,选主,分布式队列等,一般情况下我们不需要完全自己实现,可以利用现有的一些组件去实现,go领域比较常用的是基于etcd来实现。

关于分布式锁:

Locker:func NewLocker(s *Session, pfx string) sync.Locker Mutex:Lock/Unlock 方法需要context.Context参数,在请求锁的时候可以设置超时时间,或者主动取消请求

布式锁的实现需要考虑多方面的问题,例如锁的粒度、锁的超时机制、锁的可重入性、锁的竞争情况等等。在实际应用中,我们需要综合考虑业务需求和系统特性,灵活选择合适的分布式锁实现方式

Example:

import (
	"context"
	"go.etcd.io/etcd/clientv3"
	"go.etcd.io/etcd/clientv3/concurrency"
)

// 获取分布式锁
func AcquireLock(client *clientv3.Client, lockName string) (*concurrency.Mutex, error) {
	// 创建一个分布式锁
	session, err := concurrency.NewSession(client)
	if err != nil {
		return nil, err
	}
	mutex := concurrency.NewMutex(session, "/my-lock/"+lockName)

	// 尝试获取锁
	err = mutex.Lock(context.Background())
	if err != nil {
		return nil, err
	}
	return mutex, nil
}

// 释放分布式锁
func ReleaseLock(mutex *concurrency.Mutex) {
	mutex.Unlock(context.Background())
}

此文章为2月Day20学习笔记,内容来源于极客时间《Go 并发编程实战课》