Golang 関数を使用すると、分散ロックを実装し、複数のプロセスによる共有リソースへのアクセスを調整できます。これらの関数は、共有ストレージ (Redis など) を利用してロック メカニズムを実装し、常に 1 つのプロセスのみがリソースにアクセスできるようにします。
分散システムでは、複数のプロセス間で共有リソースへのアクセスを調整することが非常に重要です。分散ロックは、この目標を達成するための効果的なメカニズムであり、常に 1 つのプロセスのみがリソースにアクセスできるようにします。
Go には、分散環境でロックを直接実装できる組み込み関数 sync.Mutex
が用意されています。ただし、sync.Mutex
は単一プロセス内でのみ機能します。分散システムで使用するには、共有ストレージ (Redis や ZooKeeper など) を使用し、関数内でロックを使用する必要があります。
次に、Redis と Golang の機能を使用して分散ロックを実装する例を示します。
import ( "sync" "github.com/go-redis/redis/v8" ) type DistributedLock struct { mutex sync.Mutex key string rdb *redis.Client } func NewDistributedLock(key string, rdb *redis.Client) *DistributedLock { return &DistributedLock{ key: key, rdb: rdb, } } func (l *DistributedLock) Lock() { l.mutex.Lock() _, err := l.rdb.SetNX(l.rdb.Context(), l.key, 1, 10*time.Second).Result() if err != nil { l.mutex.Unlock() return } } func (l *DistributedLock) Unlock() { _, err := l.rdb.Del(l.rdb.Context(), l.key).Result() if err != nil { // 处理错误 } l.mutex.Unlock() }
// 实例化锁 lock := NewDistributedLock("my_lock", rdb) // 加锁 lock.Lock() defer lock.Unlock() // 在锁的保护下执行代码
以上がGolang 関数を使用して分散システムに分散ロックを実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。