当前位置:首页 > 问答 > 正文

Redis缓存 TP6框架扩展篇:深入学习tp6缓存与redis使用

🔥 Redis缓存 | TP6框架扩展篇:深入学习tp6缓存与redis使用

场景引入
凌晨3点,你的电商网站突然迎来一波流量高峰 🚀,数据库开始疯狂"咳嗽"(CPU 90%+),订单提交页面卡成PPT...这时你摸出手机,给运维发了条消息:"快!上Redis救场!"——这就是缓存的魅力。


为什么选择Redis?💡

  1. 速度碾压:内存读写 vs 磁盘读写,就像高铁🚄对比自行车🚲
  2. TPS救星:单机轻松扛住10万+QPS(MySQL:我酸了🍋)
  3. 数据结构丰富:不只是KV,还有队列、Geo、位图等花式操作

📌 数据参考(2025-08):某头部电商实测,引入Redis后API响应时间从800ms降至80ms


TP6中的Redis配置 🛠️

安装必备组件

composer require topthink/think-redis

配置文件(config/cache.php)

'redis' => [
    'type'  => 'redis',
    'host'  => '127.0.0.1',
    'port'  => 6379,
    'password' => '', // 有密码时填写
    'select' => 0,   // 默认库
    'timeout' => 0,  // 超时时间(0为不限)
    'persistent' => false // 是否长连接
],

多Redis服务配置

'connections' => [
    'cache' => [ // 缓存专用
        'host' => '192.168.1.100',
        'select' => 1
    ],
    'queue' => [ // 队列专用
        'host' => '192.168.1.101',
        'select' => 2
    ]
]

实战代码示范 💻

基础操作(像用数组一样简单)

// 写入缓存(默认3600秒)
Cache::store('redis')->set('user_123', $userInfo);
// 带过期时间(5分钟)
Cache::set('hot_goods', $goodsList, 300);
// 读取缓存
$data = Cache::get('user_123');
// 删除缓存
Cache::delete('user_123');

高级玩法 🎯

计数器场景

// 文章阅读量+1(原子操作)
Cache::store('redis')->inc('article_views_'.$articleId);

秒杀库存控制

// 使用Redis的递减(避免超卖)
$remain = Cache::store('redis')->dec('seckill_stock', 1);
if($remain >= 0){
    // 下单逻辑...
}

延迟队列(订单超时关闭):

Redis缓存 TP6框架扩展篇:深入学习tp6缓存与redis使用

// 添加30分钟后执行的任务
Cache::store('redis')->zAdd('delay_queue', time()+1800, $orderId);

避坑指南 ⚠️

  1. 缓存雪崩:批量过期时随机加时间差

    $expire = 3600 + rand(0, 300); // 1小时±5分钟
  2. 缓存穿透:空值也缓存

    if(!$data){
        Cache::set('empty_key', 'NULL', 60); // 短时间缓存空值
    }
  3. 内存警告:记得设置maxmemory-policy(推荐allkeys-lru)


性能优化建议 🚀

  1. Pipeline批量操作:减少网络往返

    Redis缓存 TP6框架扩展篇:深入学习tp6缓存与redis使用

    Cache::store('redis')->multi()
        ->set('key1', $value1)
        ->set('key2', $value2)
        ->exec();
  2. 大Key拆分:比如1MB的用户关系列表改为分页存储

  3. 监控指标:重点关注

    • 内存使用率(<70%)
    • 命中率(>90%)
    • 慢查询(>5ms的请求)

冷知识彩蛋 🥚

  1. Redis的持久化

    • RDB:定时快照(适合备份)
    • AOF:记录每步操作(更安全但体积大)
  2. 内存淘汰策略

    Redis缓存 TP6框架扩展篇:深入学习tp6缓存与redis使用

    # 在redis.conf中配置(根据业务选择)
    volatile-lru    # 最近最少使用的过期键
    allkeys-random  # 全体随机淘汰

最后唠叨:缓存不是银弹💊,用得好是解药,用不好是毒药,建议先在测试环境暴力模拟高并发场景(比如用JMeter狂发请求),确认没问题再上线~

(完)

发表评论