头图

前言

“独乐山水,不如与人同赏。”
我们的博客不是孤芳自赏的私人花园,而是希望被看见、被阅读、被共鸣的思想空间。

在之前的《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 统计是一个轻量而高效的解决方案。


云轻雨细
1 声望0 粉丝