欢迎光临
我们一直在努力

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;
?>

超简单说明(一看就懂)

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

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

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

  • scard 获取点赞人数。

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

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

    功能

    • 文章积分排名
    • 用户积分排名
    • 热门榜单
    • 支持:增加分数、获取排名、取前 10 名

    <?php
    $redis = new Redis();
    $redis->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 "排行榜前三名:<br>";
    print_r($topList);

    // ==========================
    // 3. 获取某个文章的 排名 + 分数
    // ==========================
    $articleId = "1003";
    $score = $redis->zScore($key, $articleId); // 分数
    $rank = $redis->zRevRank($key, $articleId); // 排名(从0开始,+1就是第1名)

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

    必记 4 个函数(超简单)

  • zIncrBy → 给某个成员加分
  • zRevRange → 取从高到低的排行榜
  • zScore → 获取分数
  • zRevRank → 获取排名
  • 为什么 Redis 做排行榜最快?

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

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

  • 页面缓存
  • 登录 Token
  • 购物车
  • 点赞 / 阅读计数
  • 排行榜
  • 赞(0)
    未经允许不得转载:171主机测评 » Redis 实现页面缓存、购物车、登录 token示例、点赞 / 阅读计数,排行榜 示例
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址