PHP与Redis缓存集成完整方案
Redis在PHP项目里太常用了。缓存、队列、计数器、排行榜都用得上。今天说说PHP操作Redis的各种用法。
Redis的基本操作很简单,set和get存取值。
```php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('name', '张三');
echo $redis->get('name') . "\n";
$redis->setex('session:123', 3600, 'user_data');
$redis->mset(['k1' => 'v1', 'k2' => 'v2']);
$values = $redis->mget(['k1', 'k2']);
print_r($values);
?>
```
List结构可以用作队列。
```php
$redis->del('queue');
$redis->lPush('queue', '任务C');
$redis->lPush('queue', '任务B');
$redis->lPush('queue', '任务A');
while ($task = $redis->rPop('queue')) {
echo "处理: $task\n";
}
$redis->lPush('queue', 'task1', 'task2', 'task3');
echo "队列长度: " . $redis->lLen('queue') . "\n";
echo "范围: ";
print_r($redis->lRange('queue', 0, -1));
?>
```
Hash适合存储对象类型的数据。
```php
$redis->hSet('user:1001', 'name', '张三');
$redis->hSet('user:1001', 'age', 28);
$redis->hSet('user:1001', 'email', 'zhangsan@test.com');
echo "姓名: " . $redis->hGet('user:1001', 'name') . "\n";
$user = $redis->hGetAll('user:1001');
print_r($user);
$redis->hMSet('user:1002', ['name' => '李四', 'age' => 35]);
echo "字段存在: " . ($redis->hExists('user:1002', 'name') ? '是' : '否') . "\n";
?>
```
Set适合做集合运算。
```php
$redis->sAdd('user:1:tags', 'PHP', 'JavaScript', 'MySQL');
$redis->sAdd('user:2:tags', 'PHP', 'Python', 'Docker');
$common = $redis->sInter('user:1:tags', 'user:2:tags');
echo "共同标签: " . implode(', ', $common) . "\n";
$all = $redis->sUnion('user:1:tags', 'user:2:tags');
echo "所有标签: " . implode(', ', $all) . "\n";
?>
```
Sorted Set适合排行榜。
```php
$redis->zAdd('leaderboard', 9500, '张三');
$redis->zAdd('leaderboard', 8800, '李四');
$redis->zAdd('leaderboard', 9900, '王五');
$top3 = $redis->zRevRange('leaderboard', 0, 2, true);
echo "排行榜前三:\n";
foreach ($top3 as $player => $score) {
echo " $player: $score分\n";
}
$rank = $redis->zRevRank('leaderboard', '李四');
echo "李四排名: 第" . ($rank + 1) . "名\n";
?>
```
Redis的过期时间管理也很重要。EXPIRE设置过期时间,TTL查看剩余时间。合理设置过期时间可以避免内存堆积。
Redis在项目中的常见用法包括缓存数据库查询结果、Session存储、计数器、排行榜、消息队列、分布式锁等。用好Redis能显著提升应用性能。
PHP与Redis缓存集成完整方案