46 lines
1.3 KiB
Markdown
46 lines
1.3 KiB
Markdown
|
|
# CLAUDE.md
|
|||
|
|
|
|||
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|||
|
|
|
|||
|
|
## 项目概述
|
|||
|
|
|
|||
|
|
基于 Redis 的分布式锁实现(Go)。使用 Redis SETNX + Lua 脚本保证原子性,支持锁获取、释放、续期和重试。
|
|||
|
|
|
|||
|
|
## 常用命令
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 构建
|
|||
|
|
go build ./...
|
|||
|
|
|
|||
|
|
# 运行所有测试(需要 Redis 连接,配置在 .env)
|
|||
|
|
go test ./... -v -count=1
|
|||
|
|
|
|||
|
|
# 运行单个测试
|
|||
|
|
go test ./lock/ -v -run TestAcquireAndRelease
|
|||
|
|
|
|||
|
|
# 整理依赖
|
|||
|
|
go mod tidy
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 架构
|
|||
|
|
|
|||
|
|
- `lock/lock.go` — 核心分布式锁实现,所有关键操作(Release、Refresh)使用 Lua 脚本保证原子性
|
|||
|
|
- `lock/lock_test.go` — 集成测试,依赖真实 Redis 实例,通过 .env 的 REDIS_URL 连接
|
|||
|
|
- `main.go` — 示例入口,演示锁的基本用法
|
|||
|
|
|
|||
|
|
## 关键设计
|
|||
|
|
|
|||
|
|
- **锁安全释放**:Release 使用 Lua 脚本先 GET 校验 owner 再 DEL,防止误释放别人的锁
|
|||
|
|
- **锁续期**:Refresh 同样用 Lua 脚本保证只有持有者能续期
|
|||
|
|
- **TTL 防死锁**:所有锁都有过期时间,即使进程崩溃也不会永久死锁
|
|||
|
|
- **Owner 标识**:每次持锁需要唯一 owner(如 UUID),保证分布式环境下的安全性
|
|||
|
|
|
|||
|
|
## 提交规范
|
|||
|
|
|
|||
|
|
使用 Conventional Commits:
|
|||
|
|
- `feat:` 新功能
|
|||
|
|
- `fix:` 修复
|
|||
|
|
- `test:` 测试相关
|
|||
|
|
- `docs:` 文档
|
|||
|
|
- `refactor:` 重构
|