当前位置:智汇导航 » 站长资讯 » 资讯文章 » 站长新闻 » 文章详细 订阅RssFeed

别再吹Redis缓存秒杀了,昨晚差点把我服务器干崩

来源:本站原创 浏览:273次 时间:2026-10-03

刚眯了两个小时,爬起来必须吐槽一下。

最近群里那帮人天天吹Redis做对象缓存,说QPS能干到十万,我信了他们的邪,前天晚上动手把博客的MySQL查询全搬到Redis上了。

白天跑得好好的,我还美滋滋地发了个朋友圈炫耀。结果昨晚八点,流量一上来,网站直接502。

我以为被CC攻击了,登服务器一看,Nginx的error.log里全是upstream timed out,再看PHP-FPM的状态,进程全卡死。

折腾了半宿才发现,问题出在Redis的/etc/redis/redis.conf第540行附近那个maxmemory-policy。

我之前抄别人的配置,写的是allkeys-lru。这玩意看着挺科学,但老内存一旦爆了,它就开始疯狂淘汰键。

站长日常

我的缓存里有些是刚存进去的热点数据,也被稀里糊涂地踢掉了。

踢掉就算了,关键我的代码逻辑是“查不到缓存就直接回源查数据库”,结果Redis一边踢,数据库一边查,瞬间把MySQL的连接数顶满,直接引发雪崩。

那帮吹牛的大神,没一个提过这个参数得结合业务改。要是你的键明显是分冷热的,得用volatile-lru,给冷数据设置过期时间,别让它一棵树上吊死。

我半夜改了配置,命令行敲了个redis-cli config set maxmemory-policy volatile-lru,又重启了php-fpm,才算消停。

  • 说实话,缓存这玩意不是银弹。
  • 光知道set和get,不盯着淘汰策略和内存上限,早晚要交学费。
  • 以后谁再跟我吹什么一键搞定高并发,我直接把昨晚的错误日志糊他脸上。

不行了,补觉去,下午还得排查下那个慢查询日志,真是一坑未平一坑又起。