基于Redis的分布式锁

一.涉及两个redis命令

1.获取锁

SET 锁的key 锁的value NX EX 秒数

举例:

  • SET:Redis 的基础命令,用于设置键值对
  • lock:键名(这里表示锁的名称,所有竞争同一资源的客户端需使用相同的键名)
  • thread1:键的值(通常用于标识锁的持有者,如客户端 ID、线程 ID 等,用于释放锁时验证身份)
  • NX :选项(全称NOT EXISTS),表示 " 仅在键lock不存在时才执行设置操作 ",确保同一时间只有一个客户端能获取到锁(互斥性核心)
  • EX 10 :选项,表示给键lock设置过期时间为 10 秒(EX单位是秒,PX则表示毫秒),避免客户端因异常未释放锁而导致死锁

2.释放锁

DEL lock

这里表示释放上面的lock锁(删除key为lock的键值对)。

二.流程图

三.使用Java代码,使用一下Redis分布式锁

1.创建接口ILock

java 复制代码
public interface ILock {
    /**
     * 尝试获取锁
     * @param timeoutSec 锁的失效时间,过期则自动释放
     * @return true代表获取锁成功;false代表获取锁失败
     */
    boolean tryLock(long timeoutSec);

    /**
     * 释放锁
     */
    void unlock();
}
相关推荐
云边有个稻草人7 小时前
时序数据库选型技术剖析:从写入、存储到查询的五个关键维度
数据库
疯狂成瘾者7 小时前
Chroma向量数据库
开发语言·数据库·c#
ayt0077 小时前
Netty AbstractNioChannel源码深度剖析:NIO Channel的抽象实现
java·数据库·网络协议·安全·nio
荒川之神7 小时前
Oracle 数据仓库星座模型(Galaxy Model)设计原则
数据库·数据仓库·oracle
杰克尼7 小时前
redis(day03-商户查询缓存)
数据库·redis·缓存
枕布响丸辣7 小时前
Python 操作 MySQL 数据库从入门到精通
数据库·python·mysql
zxrhhm8 小时前
SQLServer限制特定数据库的CPU使用率,确保关键业务系统有足够的资源
数据库·sqlserver
刘~浪地球8 小时前
Redis 从入门到精通(十三):哨兵与集群
数据库·redis·缓存
dyyshb8 小时前
PostgreSQL 终极兜底方案
数据库·postgresql
他们叫我技术总监9 小时前
零依赖!FineReport11 快速对接 TDengine 数据库:从驱动部署到报表实现
大数据·数据库·ai·tdengine