上一篇
场景引入:
凌晨3点,你的电商网站突然迎来一波流量高峰 🚀,数据库开始疯狂"咳嗽"(CPU 90%+),订单提交页面卡成PPT...这时你摸出手机,给运维发了条消息:"快!上Redis救场!"——这就是缓存的魅力。
📌 数据参考(2025-08):某头部电商实测,引入Redis后API响应时间从800ms降至80ms
composer require topthink/think-redis
'redis' => [ 'type' => 'redis', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', // 有密码时填写 'select' => 0, // 默认库 'timeout' => 0, // 超时时间(0为不限) 'persistent' => false // 是否长连接 ],
'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){ // 下单逻辑... }
延迟队列(订单超时关闭):
// 添加30分钟后执行的任务 Cache::store('redis')->zAdd('delay_queue', time()+1800, $orderId);
缓存雪崩:批量过期时随机加时间差
$expire = 3600 + rand(0, 300); // 1小时±5分钟
缓存穿透:空值也缓存
if(!$data){ Cache::set('empty_key', 'NULL', 60); // 短时间缓存空值 }
内存警告:记得设置maxmemory-policy
(推荐allkeys-lru)
Pipeline批量操作:减少网络往返
Cache::store('redis')->multi() ->set('key1', $value1) ->set('key2', $value2) ->exec();
大Key拆分:比如1MB的用户关系列表改为分页存储
监控指标:重点关注
Redis的持久化:
内存淘汰策略:
# 在redis.conf中配置(根据业务选择) volatile-lru # 最近最少使用的过期键 allkeys-random # 全体随机淘汰
最后唠叨:缓存不是银弹💊,用得好是解药,用不好是毒药,建议先在测试环境暴力模拟高并发场景(比如用JMeter狂发请求),确认没问题再上线~
(完)
本文由 玄思嘉 于2025-08-01发表在【云服务器提供商】,文中图片由(玄思嘉)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/502336.html
发表评论