March 2026

使用Go语言实现Redis分布式锁(附有看门狗自动续期机制)

Redis我们日常开发经常使用,而分布式锁的一个重要实现就是通过Redis完成,分布式锁要解决的核心问题是防止对某个资源进行重复或者过度请求,例如我们在分布式系统中创建订单之前,必须获取分布式锁才能创建订单,其要解决的主要问题有两个: 1)如果用户重复点击提交订单按钮,可以通过分布式锁避免重复创建订单 2)商品库存有限,通过分布式锁能够解决超卖问题 Redis实现分布式锁 由于Redis中set nx命令的原子性,只有在键值不存在的时候才能设置值,因此可以通过set nx实现分布式锁,但是它有弊端就是: 如果业务还没有执行完,那么会导致业务没有执行完,锁就被释放了 因此延伸出了基于Redis延伸的Redisson分布式锁框架,它实现的原理在于使用Redis单线程模型执行SET NX命令lua脚本确保获取锁操作原子性,同时它内置了更为丰富的看门狗机制,满足了在业务执行过程中,自动续期锁 Go语言实现分布式锁 上面都是基于理论介绍,接下来就实现基于Redis的分布式锁 明确原子性操作 在实现之前,我们要明确加锁、释放锁与续期锁的机制: 加锁:设置键值与过期时间,通过setnx px实现,如果键值已经存在直接返回错误 释放锁:我们一定要确保释放的锁是自己加的锁,因此要判断value值是否是之前设置的value值,只有判断正确才能够释放锁 续期锁:与释放锁同理,只有当前锁是自己加的锁才续期 完整测试用例: 测试依赖 miniredis 模拟 Redis 服务,请先安装: 测试文件:mutex_test.go 运行测试 -race 标志会启用数据竞争检测,确保并发安全。 注意事项

基于docker搭建aiclient2api图文教程

1. 前言 本文基于aiclient2api v2.9.7版本,Github地址为 https://github.com/justlovemaki/AIClient-2-API aiclient2api 能够将 GeminiCLI , ClaudeCode 等转换为不仅限于原客户端使用的API,从而供给OpenClaw或其它客户端使用 2. 搭建 首先选择一个目录,本文中使用的是/data/aiclient2api 运行 mkdir -p /data/aiclient2api && touch /data/aiclient2api/compose.yaml ,创建docker compose文件 复制以下docker compose 配置(3000端口比较常见容易被占用所以这里我改成了3180,可自行修改为其它端口)3000 为 Web UI,其余为 OAuth…

Nginx全配置解析

nginx全局配置,指定 nginx 进程运行的用户,这里是 nginx,默认为nobody。指定 nginx 使用多少个 worker 进程处理请求,这里使用了 auto,表示根据 CPU 核心数自动分配。

Go 文件和文件夹工具类:一个开箱即用的 fileutil 包

在日常开发中,文件与目录操作是高频需求。虽然 Go 标准库已经提供了 os、path/filepath 等基础能力,但直接使用仍需处理大量边界条件。本文将封装一个实用的 fileutil 工具包,涵盖常用操作:路径存在判断、目录创建、文件复制、目录复制、移动、删除、遍历、大小统计等。每个方法都有详细的注释和错误处理,可直接集成到项目中。 完整代码可在文末获取,或直接复制使用。 功能概览 核心代码:fileutil 包实现 使用示例 要点说明 函数 注意事项 CopyFile 覆盖已存在的目标文件;保留源文件权限 MoveFile 跨文件系统自动降级为复制+删除 CopyDir 递归复制,目标目录存在时会合并内容 SafeWrite 原子写入,先写临时文件再 rename,防止写一半时进程崩溃导致数据损坏 ListFiles 支持按扩展名过滤,返回绝对路径 EnsureDir 已存在但不是目录时报错,避免误用 这个工具包覆盖了日常开发中 90%…

基于docker搭建sub2api图文教程

1. 前言 本文基于sub2api v0.1.84版本,Github地址为 https://github.com/Wei-Shaw/sub2api sub2api 能够将 GeminiCLI , ClaudeCode 等转换为不仅限于原客户端使用的API,从而供给OpenCode或其它客户端使用 2. 搭建 首先选择一个目录,本文中使用的是/data/sub2api 运行 mkdir -p /data/sub2api && touch /data/sub2api/compose.yaml ,创建docker compose文件 复制以下docker compose 配置(8080端口太常见容易被占用所以这里我改成了6780,可自行修改为其它端口) services: # ================= 主程序…

小白向Komari搭建及配置图文教程

1. 前言 Komari 是一个服务器监控/探针面板,github地址为 https://github.com/komari-monitor/komari 本文基于 Komari 1.1.3 版本,Purcarte主题 1.2.5 版本,KomariBeautify 0.4.2 版本 2. 部署搭建Komari 首先是部署Komari,这里我们介绍docker compose 部署和 1panel 部署两种方式(2.1与2.2两种方式二选一即可) 如果想要使用更多部署方式(例如一键脚本)可以参考Komari官方文档 https://www.komari.wiki/install/quick-start.html 2.1 docker compose 部署 首先确保你的服务器安装了 Docker ,安装 Docker…

【GitLab】使用Docker和Docker-Compose部署-个人、私有代码仓库

概述 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。 GitLab和GitHub一样是仓库管理系统,不一样的是GitLab可以自己搭建,自己或企业内部使用。 环境准备 Linux系统 docker docker-compose 硬件要求 CPU 4 核是推荐的最小核数,最多支持 500 个用户 8核最多支持1000个用户 RAM 4GB RAM是所需的最小内存大小,最多可支持 500 个用户 8GB RAM 支持多达 1000 个用户 安装 GitLab Docker 镜像可以以多种方式运行:这里介绍前面2种 使用…