redisLock.go 964 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package lxLock
  2. import (
  3. "context"
  4. "git.listensoft.net/tool/lxutils/lxDb"
  5. "github.com/go-redis/redis/v8"
  6. "time"
  7. )
  8. // RedisPool Redis连接池
  9. var RedisClient *redis.Client
  10. var redisCtx = context.Background()
  11. func InitRedis(conf lxDb.RedisConfig) {
  12. if conf.URL == "" {
  13. RedisClient = nil
  14. return
  15. }
  16. RedisClient = redis.NewClient(&redis.Options{
  17. Addr: conf.URL, // Redis 服务器地址
  18. Password: conf.Password, // Redis 密码
  19. DB: 0, // 默认数据库
  20. })
  21. }
  22. // GetRedisLock 尝试获取锁
  23. func GetRedisLock(lockKey string, expiration time.Duration) (bool, error) {
  24. // 使用 SETNX 命令尝试获取锁
  25. result, err := RedisClient.SetNX(redisCtx, lockKey, "locked", expiration).Result()
  26. if err != nil {
  27. return false, err
  28. }
  29. return result, nil
  30. }
  31. // DelRedisLock 释放锁
  32. func DelRedisLock(lockKey string) error {
  33. // 使用 DEL 命令释放锁
  34. _, err := RedisClient.Del(redisCtx, lockKey).Result()
  35. return err
  36. }