案例 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 名
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 个函数(超简单)
- zIncrBy → 给某个成员加分
- zRevRange → 取从高到低的排行榜
- zScore → 获取分数
- zRevRank → 获取排名
为什么 Redis 做排行榜最快?
- MySQL 排名要
order by,百万数据巨慢 - Redis 有序集合 天然排序
- 高并发、百万数据毫秒级出排名
你已经学会 Redis 5 大最牛功能
- 页面缓存
- 登录 Token
- 购物车
- 点赞 / 阅读计数
- 排行榜