基于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();
}
相关推荐
橙露4 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星4 小时前
sql语言之分组语句group by
java·数据库·sql
符哥20084 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql
C++ 老炮儿的技术栈4 小时前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
怣504 小时前
MySQL子查询零基础入门教程:从小白到上手(零基础入门版)
数据库·mysql
码界调试侠4 小时前
MongoDB 常用查询语法
数据库·mongodb
静听山水4 小时前
StarRocks导入数据【Stream Load】
数据库
藦卡机器人4 小时前
国产机械臂做的比较好的品牌有哪些?
大数据·数据库·人工智能
SoleMotive.4 小时前
谢飞机爆笑面经:Java大厂3轮12问真题拆解(Redis穿透/Kafka分区/MCP Agent)
redis·spring cloud·kafka·java面试·mcp
椰子今天很可爱5 小时前
Redis进阶
redis