Redis 锁
概述
本章节主要介绍通过 redis 组件,创建分布式锁的使用。
准备条件
- 完成 golang 安装
- 启动 redis 服务
- 完成 redis 连接创建
说明
- 随机版本号,防止过期误释放。
- 可重入,自动续约。
方法说明
-
函数签名:NewRedisLock func(store *Redis, key string) *RedisLock说明:1. 删除单条记录,同时会清理 key 缓存2. 默认过期时间 1500 ms入参:1. store: redis 实例2. key: key返回值:1. *RedisLock: redis locker 实例
-
函数签名:SetExpire func(seconds int)说明:1. 设置过期时间入参:1. seconds: 过期时间,单位 秒
-
函数签名:Acquire func() (bool, error)说明:1. 获取锁返回值:1. bool: 是否拿到锁2. error: 操作error
-
函数签名:AcquireCtx func(ctx context.Context) (bool, error)说明:1. 获取锁入参:1. ctx: context返回值:1. bool: 是否拿到锁2. error: 操作error
-
函数签名:Release func() (bool, error)说明:1. 释放锁返回值:1. bool: 锁是否被主动释放2. error: 操作error
-
函数签名:ReleaseCtx func(ctx context.Context) (bool, error)说明:1. 释放锁入参:1. ctx: context返回值:1. bool: 锁是否被主动释放2. error: 操作error
使用 demo
{conf := RedisConf{Host: "127.0.0.1:55000",Type: "node",Pass: "123456",Tls: false,}rds := MustNewRedis(conf)lock := NewRedisLock(rds, "test")// 设置过期时间lock.SetExpire(10)// 尝试获取锁acquire, err := lock.Acquire()switch {case err != nil:// deal errcase acquire:// 获取到锁defer lock.Release() // 释放锁// 业务逻辑case !acquire:// 没有拿到锁 wait?}}