LLM 调用账单太吓人 工单助手每天上万次调用 GPT,账单一个月涨到三千刀。财务找过来时我才认真看数据:大量 query 语义相近("怎么退货""退货流程""我要退钱"),答案其实一致,却每次都花 token 去问模型。用 Redis Stack 的向量检索做"语义缓存",把相似问题直接命中缓存,
半夜被内存告警叫醒 Redis 实例内存从 4G 一夜之间冲到 14G,触发了 maxmemory 限制开始淘汰 key,部分缓存击穿打到数据库,数据库 CPU 跟着飙到 90%。我登录上去按几个维度逐一排查,过程比想象的有条理。Redis 内存暴涨不是玄学,按固定顺序查基本能覆盖绝大多数情况。 先
32 G 内存的 Redis,用到 28 G 就没人敢再往里放了 3 月初做大促容量评估,缓存这块的数据很难看: $ redis-cli info memory used_memory_human:28.41G maxmemory_human:32.00G mem_fragmentation_rat
凌晨三点的抖动:Redis 响应时间突然飙到 800ms 九月九号大促那天晚上我值班,凌晨三点被叫起来。监控大屏上 Redis 的 P99 响应时间从平时的 0.4ms 冲到 812ms,持续了大概 40 秒,然后自己恢复了。 应用侧的连锁反应更难看:商品详情页接口 TP99 从 45ms 涨到 3
一个批量接口慢在哪:不是 Redis 慢,是网络慢 八月下旬优化一个批量查询接口。它要一次读 200 个商品的库存,我一开始的写法很直白: public Map<String, Integer> batchGetStock(List<String> skuIds) { Map<String,
大促前的准备:缓存预热到底该怎么做 八月中旬,运营定在 9 月 9 号做一场大促。我被分到的任务是"保证缓存不崩",具体要回答两个问题:活动开始时缓存是空的怎么办?某个商品突然爆了怎么办? 我们的缓存现状:Redis 6.0,一主两从 + 哨兵,单机 12GB。商品详情页的缓存是「被动」的——用户访
一次库存超发,我们把手写的 setnx 锁全换成了 Redisson 3 月底的一次促销活动,某款商品库存 200 件,实际卖出 213 件。超发 13 件。客服赔了 13 张 50 元券,加上运营的抱怨,够我记很久。 查下来是分布式锁失效。我们当时用的是自己封装的 setnx 锁,问题出在一个很隐
故障演练那天,我们丢了 400 多条缓存 key 公司 7 月底做了一次故障演练,运维在预发环境把 Redis 主节点的进程 kill 掉,看哨兵能不能自动切换。切是切成功了,但演练结束后比对数据,主库的 key 数量是 12,480,331,切过去之后新主库只有 12,479,905,少了 426
宿主机重启,Redis 丢了 5 分钟的数据 4 月 20 号凌晨,云厂商的一台宿主机异常重启,我们的 Redis 主节点正好在上面。进程恢复之后,运营来反馈:03:12 到 03:17 之间领取的优惠券,用户端显示"未领取",但业务库里记录是有的。 核对下来丢了 2347 条。我们 Redis 5
code review 时,我们为一个顺序吵了半小时 一月中旬,同事小王提了个 PR,商品改价接口里他这么写的: @Transactional public void updatePrice(Long skuId, BigDecimal newPrice) { redisTemplate.d