1、 使用数据结构:string
2、 使用操作命令:Redis 字符串(String)
// 只有在 key 不存在时设置 key 的值。成功返回1,失败返回0
SETNX key value
// 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
SETEX key seconds value
// 获取指定 key 的值。
GET key
// 该命令用于在 key 存在时删除 key。成功返回1,失败返回0
DEL key
3、 实现原理
- 获取分布式锁
- 设置锁定时间(防止死锁)
- 业务逻辑
- 释放分布式锁
- 附加:防止程序异常结束
- 使用 SETNX key 当前时间+超时时间 命令获取分布式锁
当返回值为1时,表示当前程序已获取分布式锁,进行步骤2,否则可进行步骤5
- 获取到锁之后应立即使用 SETEX key 5 value 设置锁存在时间(以秒为单位),防止程序异常结束造成死锁
- 业务逻辑…
- 业务结束后使用 DEL key 释放分布式锁
- 附加:当步骤1返回值为0时,获取锁值进行判断:
使用GET key 获取上锁时间和超时时间
当锁定超时时,使用 DEL key 强制开锁