前言
“独乐山水,不如与人同赏。”
我们的博客不是孤芳自赏的私人花园,而是希望被看见、被阅读、被共鸣的思想空间。
在之前的《WordPress个人博客搭建(一)》《WordPress个人博客搭建(二)》《WordPress个人博客搭建(三)》文章中,我们一同在非凡云云服务器上,完成了自己个人博客的部署。现在,你不再只是网络世界的旁观者,而成为了内容的创造者、思想的传播者。
但问题也随之而来:我们如何知道自己写的内容是否真的有人看?又如何判断哪些文章更受欢迎?这时候,UV(独立访客)统计就成了衡量流量质量的关键指标。
不同于 PV(页面浏览量),UV 更关注的是“真实访问人数”。一个用户一天内多次刷新页面,只能算作一次 UV。这种去重统计方式,更能反映内容的真实影响力。
为了实现高效、准确的 UV 统计,本文将带你使用 Redis 搭建一套轻量级的统计系统。它不仅响应速度快、资源占用低,还能自动去重、定时清理历史数据,是中小型博客和高并发网站的理想选择。
一、为什么选择 Redis 来做 UV 统计?
Redis 是一种基于内存的高性能键值数据库,它的优势在于:
- ✅ 响应速度快,毫秒级响应
- ✅ 支持自动去重的数据结构(如 Set)
- ✅ 可设置过期时间,自动清理历史数据
- ✅ 支持分布式部署,适用于高并发场景
相比传统的数据库方案,Redis 更像是一个“数字清点员”,能在极短时间内完成大量数据的去重和统计工作。
二、核心思路:用 Set 实现访客“签到墙”
我们可以将 Redis 中的 Set 数据结构想象成一面“每日更新的签到墙”:
- 每个用户就是一位访客;
- 每天一张新墙(即一个新的 key);
- 用户首次来访,就在墙上签名(加入 Set);
- 再次访问则不再重复签名(Set 自动去重);
- 最终统计签名人数,就是当天的 UV 数。
这种设计不仅简单高效,而且天然支持去重,非常适合用于 UV 场景。
三、实战演示:Python + Redis 实现 UV 记录系统
🧩 步骤一:安装 Redis 和 Python 客户端
在 Linux 上安装 Redis:
sudo apt update
sudo apt install redis-server
安装 Python Redis 包:
pip install redis
🧪 步骤二:编写 UV 统计脚本
以下是完整的实现代码,带有详细注释:
import redis
from datetime import datetime
# 连接本地 Redis,默认端口6379
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)
def record_uv(user_id):
# 构造key名,格式为 log:YYYY-MM-DD:view
today = datetime.now().strftime('%Y-%m-%d')
key_name = f"log:{today}:view"
# 使用SADD命令添加用户ID,自动去重
redis_client.sadd(key_name, user_id)
# 设置24小时后自动过期,避免无限增长
redis_client.expire(key_name, 86400) # 86400秒 = 24小时
def get_today_uv():
today = datetime.now().strftime('%Y-%m-%d')
key_name = f"log:{today}:view"
# 获取当前Set集合大小,即UV数
return redis_client.scard(key_name)
📌 步骤三:在网页中调用 UV 脚本
你可以在每次用户访问页面时,记录其唯一标识(如 Cookie ID 或 Session ID):
user_id = request.cookies.get('user_id') or generate_new_user_id()
record_uv(user_id)
print("今日UV总数:", get_today_uv())
这样就能在不影响用户体验的前提下,轻松统计每天的独立访客数量。
四、进阶技巧:分页 UV、多页面统计怎么做?
如果你希望统计多个页面的 UV,比如首页、文章页、商品详情页等,只需在 key 中加入页面标识即可:
key_name = f"log:{today}:{page_id}:view"
例如:
log:2025-04-05:index:view
log:2025-04-05:product1001:view
这样,你可以轻松实现每个页面的独立 UV 统计。
五、结语:让 Redis 成为你网站的“智能记事本”
“小智治事,大智治制。”
——《资治通鉴》
Redis 就像一本会自动整理的“访客记事本”,它不仅能快速记录谁来了,还能告诉你一天来了多少人,且不会重复计算。
对于追求性能与效率的网站而言,用 Redis 实现 UV 统计是一个轻量而高效的解决方案。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。