Help us shape the future of Go! Take the 2026 Go Developer Survey

keylock

package
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 30, 2025 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

Package keylock 提供基于字符串键的细粒度锁工具

KeyLock 允许根据字符串键进行加锁和解锁,不同的键可以并发执行, 相同的键会串行执行。这对于需要对特定资源进行并发控制的场景非常有用。

主要特性:

  • 基于字符串键的锁定机制
  • 不同键之间互不影响,可以并发执行
  • 相同键会串行执行,保证线程安全
  • 自动清理空闲的锁,避免内存泄漏
  • 支持定时清理协程

使用场景:

  • 用户级别的并发控制(如:user:123)
  • 订单级别的并发控制(如:order:456)
  • 资源级别的并发控制(如:channel:789)
  • 避免全局锁,提高并发性能

基本用法:

package main

import (

"fmt"
"github.com/L8CHAT/l8chat-util/keylock"

)

func main() {
   // 创建 KeyLock 实例
   kl := keylock.NewKeyLock()

   // 启动清理协程(可选)
   kl.StartCleanLoop()
   defer kl.StopCleanLoop()

   // 锁定特定的键
   kl.Lock("user:123")
   defer kl.Unlock("user:123")

   // 执行需要保护的业务逻辑
   fmt.Println("处理用户 123 的数据...")
}

并发示例:

func processUser(kl *keylock.KeyLock, userID string) {
   // 锁定特定用户
   kl.Lock(userID)
   defer kl.Unlock(userID)

   // 处理用户数据
   // 不同用户可以并发处理
   // 相同用户会串行处理
}
func main() {
   kl := keylock.NewKeyLock()
   kl.StartCleanLoop()
   defer kl.StopCleanLoop()

   // 并发处理多个用户
   go processUser(kl, "user:123")
   go processUser(kl, "user:456")
   go processUser(kl, "user:123") // 会等待第一个 user:123 完成
}

注意事项:

  • 必须成对调用 Lock 和 Unlock
  • 建议使用 defer 确保解锁
  • StartCleanLoop 是可选的,用于定期清理空闲锁
  • 默认清理间隔为 24 小时

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type KeyLock

type KeyLock struct {
	// contains filtered or unexported fields
}

KeyLock KeyLock

func NewKeyLock

func NewKeyLock() *KeyLock

NewKeyLock NewKeyLock

func (*KeyLock) Clean

func (l *KeyLock) Clean()

Clean 清理空闲锁

func (*KeyLock) Lock

func (l *KeyLock) Lock(key string)

Lock 根据关键字加锁

func (*KeyLock) StartCleanLoop

func (l *KeyLock) StartCleanLoop()

StartCleanLoop 开启清理协程

func (*KeyLock) StopCleanLoop

func (l *KeyLock) StopCleanLoop()

StopCleanLoop 停止清理协程

func (*KeyLock) Unlock

func (l *KeyLock) Unlock(key string)

Unlock 根据关键字解锁

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL