用Docker快速搭建支持分布式锁的Redis服务需两步:先启动带密码和AOF持久化的Redis容器,再通过Redisson实现自动续期、看门狗等健壮锁机制;单节点即可满足中小规模需求。

用 Docker 快速搭建支持分布式锁的 Redis 服务,核心是两步:先跑起一个可信赖的 Redis 容器,再确保它能被多个服务安全地用于 SETNX + EXPIRE 或更可靠的 Redisson 锁机制。不需要复杂集群,单节点 Redis 就足以支撑中小规模分布式锁需求。
基础 Redis 容器启动(带密码与持久化)
这是最简可用的起点,适合开发和测试环境:
- 创建配置目录和 redis.conf 文件(启用远程访问、密码、AOF 持久化)
- 运行容器时挂载配置和数据目录,显式指定 redis-server 启动参数
- 关键命令示例:
echo "bind 0.0.0.0
protected-mode no
port 6379
requirepass mypass123
appendonly yes
dir /data" > /opt/redis/conf/redis.conf
docker run -d \
--name redis-lock \
-p 6379:6379 \
-v /opt/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /opt/redis/data:/data \
redis:7 \
redis-server /etc/redis/redis.conf
启动后,用 redis-cli -h 127.0.0.1 -p 6379 -a mypass123 ping 测试,返回 PONG 即成功。
用 Redisson 实现健壮的分布式锁(推荐生产用)
直接用 SETNX 容易出问题(如业务崩溃未释放锁),Redisson 封装了自动续期、看门狗、公平性等能力,更稳妥:
- 在 Spring Boot 项目中引入
redisson-spring-boot-starter - 配置
application.yml指向你的 Docker Redis 地址和密码 - 代码中通过
RLock lock = redissonClient.getLock("order:1001");获取锁,调用lock.lock()即可自动加锁并续期
Redisson 默认使用 JSON 序列化,避免 key/value 乱码;连接池、超时、心跳等参数建议按实际并发量调整(例如 connectionPoolSize: 32)。
验证锁行为是否生效
不用写完整业务,用两个终端快速模拟竞争:
- 终端 A:
redis-cli -a mypass123→ 执行SETNX lock:resource 1→ 返回(integer) 1表示抢到锁 - 终端 B:同样执行
SETNX lock:resource 1→ 返回(integer) 0表示失败 - 再在 A 中执行
EXPIRE lock:resource 10设定 10 秒过期,B 过几秒重试就能成功
这个过程直观体现了“抢占+超时”的基本逻辑,也是 Redis 分布式锁的底层依据。
注意事项与避坑点
几个容易忽略但影响稳定性的细节:
- 务必设置密码(
requirepass),否则暴露在公网等于裸奔 - 不要用
docker run redis不带配置的默认启动,它默认开启保护模式,拒绝外部连接 - SETNX + EXPIRE 要原子执行?用
SET key value EX seconds NX一条命令替代,避免竞态 - 锁的 key 命名要有业务含义且唯一(如
pay:order:2026042012345),避免误删


















