商城外卖家政商品列表为什么能抗住反复刷:查缓存查库回写一次拆解

简介: 本文详解DSMall商品列表缓存优化实践:通过「条件序列化生成唯一Key」避免漏参、收紧数据库查询条件保障数据安全、TTL+业务Tag实现精准失效。一整套方案将高频读请求从DB卸载至KV,显著降低数据库压力,适用于商城、外卖、家政等多场景列表缓存。(239字)

用户端最凶的流量,经常是商品/服务列表:商城 SKU、外卖菜品、上门家政服务项,按平台、店铺、分类、排序一刷就是一屏。
如果每次都打库,高峰时数据库连接和慢查询会先告警。
本文只拆 DSMall 商品列表这一条链路,看缓存具体卡在哪一步。


1. 场景:同一筛选会被问很多遍

列表请求通常带着一串条件,例如:

  • platform(mall 商城 / food 外卖 / house 上门家政 / kms)
  • store_id、分类、排序字段
  • limit 条数

同一运营位、同一店铺首页,短时间内条件几乎不变——典型读多写少


2. 第一步:用「整包参数」生成 Key

不是手写 goods_list_mall_store_12_...(易漏参数),而是:

$cacheKey = sprintf(
    CacheKeyManager::GOODS_LIST_KEY,  // goods_list_%s
    md5(serialize($data))
);
$result = KvManager::cache()->get($cacheKey);

要点:

  • 模板前缀固定在 CacheKeyManager,方便全局搜索
  • serialize($data) 把当次查询条件整体纳入指纹
  • 换排序、换分类 = 换 Key,不会串数据

命中则直接返回,后面的 DAO 不再跑。


3. 第二步:未命中才查库,且条件收紧

只有 $result == null 时才组装查询,例如坚持:

  • 已上架
  • 系统审核通过
  • 未软删
  • 库存 > 0

再叠加请求里的 platform / store / 分类等。
排序也白名单化(销量、评分、时间、点击、最低价等),避免任意字段注入排序。

也就是说:缓存里存的是「已经适合给 C 端看的结果」,不是随便一张宽表 dump。


4. 第三步:回写时带 TTL 和 Tag

KvManager::cache()->set(
    $cacheKey,
    $result,
    3600,                           // 1 小时
    CacheKeyManager::GOODS_TAG      // tag = goods
);

两层含义:

  1. TTL:即使忘记手动失效,最迟一小时也会过期重建
  2. Tag:后台改商品分类、运营调整商品域时,可 clear(GOODS_TAG) 整组丢掉相关列表/分页缓存,而不用知道有哪些 md5 Key

分页接口同理,用 GOODS_PAGES_KEY + 同一 GOODS_TAG,和列表共用失效域。


5. 性能上到底赚在哪

无缓存 有列表缓存
每次筛选打库 + 关联查询 热点条件几乎只读缓存
连接数随 QPS 涨 回源次数被 TTL / 失效节奏压住
排序、分类重复计算 同指纹条件复用结果集

这不是「缓存万能」,而是:把最热、可变维度可枚举的读请求,从 DB 挪到 KV

店铺列表、技师列表也是同一套路:STORE_LIST_KEY / TECHNICIAN_LIST_KEY + md5(serialize($data)) + 3600 + 对应 Tag。学会商品列表,其它列表几乎同构。


6. 使用时要注意的三点

  1. 条件必须进入 Key
    漏掉 platform 会导致商城列表串到外卖数据。用整包 serialize 就是为了降低漏拼概率。

  2. 写商品后要能失效
    只 set 不 clear,用户会在最长 TTL 内看到旧列表。分类、积分商品等后台写操作应对应 clear(*_TAG)

  3. 开关
    CACHE_ENABLED=false 时 get/set 相当于旁路,便于本地调试;压测和生产再打开。


收束

商品列表抗刷,靠的不是单行「加 Redis」,而是:

条件指纹 Key → 收紧条件查库 → TTL + 业务 Tag 回写。

把这一条链路跑顺,本地生活 C 端(商城、外卖、上门家政)大半读流量就有了抓手。

相关文章
|
2天前
|
人工智能 自然语言处理 安全
阿里云AI数智鉴密:AI 生成内容如何拿到一张"防篡改的身份证"
隐形水印 + C2PA签名:让AI生成内容“持证上岗”。
1093 0
|
11天前
|
人工智能 自然语言处理 安全
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
本文聚焦阿里云2026年推出的三款自研AI办公产品,清晰拆解千问办公、Qoder Teams、Qoder CN的差异化定位与能力边界:千问办公主打职场全场景提效,支持自然语言指令一键完成PPT生成、数据分析等高频办公任务;Qoder Teams面向程序员团队,深度整合AI代码生成、团队协同与企业知识库能力;Qoder CN则专为金融、政务等强合规场景打造,实现数据不出境与VPC私有化部署。文章同步给出分场景选型指南与最新活动定价,帮助不同类型的企业按需组合产品,实现业务岗、研发岗与强合规场景的AI能力全覆盖。
3659 3
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
|
23天前
|
人工智能 缓存 前端开发
DeepSeek Harness 首发实测 + 入门教程,夯爆了!梁神我错了
DeepSeek Harness + DeepSeek V4 Pro 项目实战保姆级教程!手把手带你从零安装开源 AI 编程工具,开发架构图、知识讲解网站、3D 网页游戏、全栈 AI 应用 4 个项目,覆盖运行模式选择、插件安装与开发,看看能不能对标 Claude。
13401 93
DeepSeek Harness 首发实测 + 入门教程,夯爆了!梁神我错了
|
16天前
|
Web App开发 人工智能 API
16 个超火的 DeepSeek Harness 插件,大肥鱼已经落后 N 个版本了。。。
DeepSeek Harness 精选插件推荐合集,从图片识别、浏览器操控、多 Agent 协作到手机远程控制,一口气带你看完 DSH 社区热门的十几个插件,覆盖技能扩展、UI 界面增强、整活玩法三大类,让你的鲸鱼变得更强。
1913 5
|
9天前
|
人工智能 监控 测试技术
Qwen3.8-Flash 来了,100万上下文、Agent、Coding 都加强了
8月26日,通义千问发布Qwen3.8-Flash-Next:125B参数、每Token仅激活6B,原生支持26万Token、可扩展至100万上下文;Coding、Agent与工具调用能力显著增强,面向真实软件工程任务,推动大模型从“回答问题”迈向“完成工作”。
|
12天前
|
人工智能 Linux iOS开发
Ollama使用教程:Ollama官网下载、Ollama本地部署大模型(2026最新)
Ollama 是一款免费开源的本地大模型运行工具,支持在 Windows/macOS/Linux 上离线运行 Qwen、DeepSeek、Llama 等主流开源模型,数据不出本机、隐私安全。提供 OpenAI 兼容 API,命令行一键拉取/运行/管理模型,无需联网,无调用限制,是开发者与 AI 爱好者部署本地 AI 助手的理想选择。(239 字)
|
17天前
|
人工智能 Java BI
【AI】DeepSeek Harness 安装、运行、管理插件
本文介绍了如何运行DeepSeek开源的Agent框架DeepSeek Harness(dsh)。主要内容包括:使用nvm安装适配的Node版本;通过代理加速克隆GitHub源码;使用pnpm安装依赖并启动项目;配置DeepSeek API Token;安装扩展功能的插件。该框架自带Web界面,支持模型适配、文件编辑等插件化功能
2156 1