Redis 实现页面缓存、购物车、登录 token示例、点赞 / 阅读计数,排行榜 示例

案例 1:Redis 实现页面缓存(加速网站)

复制代码
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 缓存KEY
$key = "page:home:info";

// 先看缓存有没有
$cache = $redis->get($key);

if ($cache) {
    // 有缓存,直接输出(超快)
    echo "来自缓存:";
    echo $cache;
} else {
    // 没有缓存,从数据库查
    $data = "这里是从 MySQL 查询的首页数据(300万条表查询)";

    // 存入 Redis,缓存 10 秒
    $redis->setex($key, 10, $data);

    echo "来自数据库:";
    echo $data;
}

作用:大幅降低 MySQL 压力,页面秒开。

案例 2:Redis 实现登录 Token(最常用)

复制代码
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 1. 用户登录成功,生成 token
$userId = 1001;
$token = md5(uniqid());

// 2. 存入 Redis,2小时过期
$redis->setex("token:$token", 7200, $userId);

// 3. 前端请求时,验证 token
$userToken = $_GET['token'];
$uid = $redis->get("token:$userToken");

if ($uid) {
    echo "已登录,用户ID:" . $uid;
} else {
    echo "请重新登录";
}

作用:替代 Session,支持分布式、多端登录。

案例 3:Redis 实现简易购物车

复制代码
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 用户ID
$userId = 1001;
$key = "cart:$userId";

// 加入购物车
$redis->hSet($key, "product:1001", 2); // 商品1001,买2个
$redis->hSet($key, "product:1002", 1);

// 查看购物车
$cart = $redis->hGetAll($key);
echo "你的购物车:<br>";
print_r($cart);

// 删除商品
$redis->hDel($key, "product:1001");

作用:速度极快,比数据库存购物车快 100 倍。

  • 页面缓存 → 快
  • 登录 Token → 安全、支持分布式
  • 购物车 → 高性能
  • 高频计数 → 不卡 MySQL

案例 4:Redis 实现:文章阅读量 + 点赞功能(防重复、超高并发)

复制代码
<?php
// 连接 Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 文章ID
$articleId = 1001;
// 用户ID
$userId = 10086;


// ==========================
// 1. 文章阅读量 +1(超高并发不卡顿)
// ==========================
$redis->incr("article:view:$articleId");


// ==========================
// 2. 点赞(防重复点赞,最关键!)
// ==========================
$likeKey = "article:like:$articleId";

// 判断用户是否已经点过赞
if (!$redis->sIsMember($likeKey, $userId)) {
    // 没点过 → 加入集合
    $redis->sAdd($likeKey, $userId);
    // 点赞数 +1
    $redis->incr("article:like:count:$articleId");
    echo "点赞成功!";
} else {
    echo "你已经点过赞了~";
}


// ==========================
// 3. 获取结果(前端显示)
// ==========================
$viewCount = $redis->get("article:view:$articleId"); // 阅读量
$likeCount = $redis->scard($likeKey); // 点赞数

echo "<br>阅读量:" . $viewCount;
echo "<br>点赞数:" . $likeCount;
?>

超简单说明(一看就懂)

  1. incr 计数 +1,比 MySQL 快 100 倍,高并发不卡死。

  2. 集合 set 用来存谁点过赞,天然防重复

  3. sIsMember 判断用户是否已经点赞。

  4. scard 获取点赞人数。

案例5、Redis 排行榜(热门文章 / 积分排名)

Redis 实现排行榜(有序集合 sorted set)

功能

  • 文章积分排名

  • 用户积分排名

  • 热门榜单

  • 支持:增加分数、获取排名、取前 10 名

    connect('127.0.0.1', 6379); // 排行榜 KEY $key = "ranking:article"; // ========================== // 1. 给文章增加积分(阅读/点赞/评论都能加) // ========================== // 文章1001 + 5分 $redis->zIncrBy($key, 5, "1001"); // 文章1002 + 3分 $redis->zIncrBy($key, 3, "1002"); // 文章1003 + 10分 $redis->zIncrBy($key, 10, "1003"); // ========================== // 2. 获取排行榜前 3 名(从大到小) // ========================== $topList = $redis->zRevRange($key, 0, 2, true); echo "排行榜前三名:
    "; print_r($topList); // ========================== // 3. 获取某个文章的 排名 + 分数 // ========================== $articleId = "1003"; $score = $redis->zScore($key, $articleId); // 分数 $rank = $redis->zRevRank($key, $articleId); // 排名(从0开始,+1就是第1名) echo "

    文章 $articleId 分数:$score"; echo "
    排名:" . ($rank + 1); ?>

必记 4 个函数(超简单)

  1. zIncrBy → 给某个成员加分
  2. zRevRange → 取从高到低的排行榜
  3. zScore → 获取分数
  4. zRevRank → 获取排名

为什么 Redis 做排行榜最快?

  • MySQL 排名要 order by百万数据巨慢
  • Redis 有序集合 天然排序
  • 高并发、百万数据毫秒级出排名

你已经学会 Redis 5 大最牛功能

  1. 页面缓存
  2. 登录 Token
  3. 购物车
  4. 点赞 / 阅读计数
  5. 排行榜
相关推荐
真实的菜3 小时前
Redis 从入门到精通(十三):性能优化与运维实战 —— 慢查询、内存优化、监控与安全
运维·redis·性能优化
zzqssliu4 小时前
taocarts高并发缓存架构:多级缓存策略、热点数据预加载与防缓存穿透实战
缓存·架构
Java 码思客7 小时前
【Redis分布式缓存实战】第20章 Redis监控运维与自动化体系
运维·redis·缓存
勇往直前plus7 小时前
Redis&Python 梳理
数据库·redis·python
我是一颗柠檬7 小时前
【Java项目技术亮点】分布式锁实现与优化:从Redisson到ZooKeeper,彻底搞懂分布式锁的底层原理
java·redis·分布式·中间件·java-zookeeper
myenjoy_17 小时前
采集网关的离线缓存与断点续传——当网络不可靠时,数据一条都不能丢
网络·缓存
我血条子呢8 小时前
飞书缓存移到D盘
缓存·飞书
宁小法9 小时前
Redis evalsha 可能返回的错误类型
redis·php·lua报错
我是一颗柠檬9 小时前
【Redis】Redis面试高频考点汇总Day15(2026年)
数据库·redis·缓存·面试