Golang访客计数实现分三级:内存计数(sync.Map/互斥锁,重启归零)、文件持久化(flock加锁读写文本)、Redis(INCR原子指令,支持分天key)。前端可加随机参数防缓存,服务端可校验UA/Referer并IP+UA哈希去重。
用 Golang 实现访客计数,核心在于「轻量、并发安全、可持久化」。不依赖外部数据库也能跑起来,适合静态页面、博客或小工具嵌入。
适合本地验证逻辑,用 sync.Map 或互斥锁保护全局变量:
Increment() 方法内加锁+自增{"count": 127})把数字存成纯文本文件,每次读-改-写,配合 os.OpenFile 和 flock 避免并发写冲突:
syscall.Flock(Linux/macOS)或 golang.org/x/sys/windows(Windows)加文件锁用 github.com/go-redis/redis/v9,利用 INCR 原子指令,天然线程安全:
client.Incr(ctx, "visitor:total").Val()
visitor:20250520),再用 GETRANGE 或 Lua 聚合前端用 fetch 请求计数接口,但需注意真实性和体验平衡:
/ap
i/hit?_t=1716420399)绕浏览器缓存User-Agent 和 Referer,过滤明显爬虫头IP + UA Hash 做简单去重(非绝对可靠,但够用)基本上就这些。从文件到 Redis,升级路径清晰,代码量都不大,关键在选对场景——小站用文件,中等流量上 Redis,要精准去重再加 Cookie 或指纹库。