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

简介: 本文详解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 端(商城、外卖、上门家政)大半读流量就有了抓手。

相关文章
|
7月前
|
SQL 移动开发 关系型数据库
MySQL技巧:利用窗口函数高效去重,告别嵌套子查询
MySQL技巧:利用窗口函数高效去重,告别嵌套子查询
|
7月前
|
存储 人工智能 安全
给AI龙虾配云端硬盘:OpenClaw阿里云/本地部署+360AI云盘Skill安装、API配置与全场景使用指南
2026年OpenClaw(龙虾、Clawdbot)已经成为AI自动化执行的主流平台,无论是自动写作、文件处理、数据抓取、资料整理,还是办公流程自动化,都能高效完成。但随着使用深入,海量文件存储、多端同步、知识沉淀、数据安全问题开始凸显——本地空间不足、文件丢失、多设备无法互通、AI无法读取云端资料,成为限制能力的核心瓶颈。
1013 2
|
移动开发 监控 小程序
java家政平台源码,家政上门清洁系统源码,数据多端互通,可直接搭建使用
一款基于Java+SpringBoot+Vue+UniApp开发的家政上门系统,支持小程序、APP、H5、公众号多端互通。涵盖用户端、技工端与管理后台,支持多城市、服务分类、在线预约、微信支付、抢单派单、技能认证、钱包提现等功能,源码开源,可直接部署使用。
894 24
|
10月前
|
人工智能 自然语言处理 人机交互
2025中国AI数字人企业厂商新排名与推荐全栈自研技术及数字引擎推荐选择
AI数字人正以逼真形象、智能交互与多场景应用崛起为科技新势力。依托NeRF、AIGC等技术,实现表情动作自然同步,广泛应用于金融、政务、医疗等领域,推动服务智能化升级。像衍科技、阿里云、百度等企业引领创新,重塑人机交互未来。
|
6月前
|
Web App开发 人工智能 缓存
# 2026 OpenClaw v2.6.1|Windows一键部署教程,核心下载报错高效排查
2026 OpenClaw v2.6.1(虾壳云版)是专为Windows优化的中文AI智能体一键部署工具,免代码、免配置,内置全部依赖,支持原生中文界面与低资源运行。本文提供全流程安装指南及下载报错(如“不支持该文件类型”)的高效排查方案,助用户快速完成本地部署。
|
9月前
|
人工智能 JSON 物联网
别光“调戏”ChatGPT了!亲手微调一个专属大模型,你需要知道这些
本文深入浅出地讲解大模型“训练-微调-推理”三步法,类比医生培养过程,帮助读者理解AI如何从通才变为专才。涵盖技术原理、实操步骤、效果评估与GPU选型,助力个人与企业打造专属AI模型,推动AI应用落地。
747 9
|
10月前
|
人工智能 自然语言处理 Cloud Native
阿里云无影Agent 开发套件AgentBay是什么?
阿里云无影Agent开发套件AgentBay是面向AI Agent的云原生自动化平台,支持自然语言驱动任务调度,覆盖浏览器、桌面、代码、移动端四大场景。集成沙箱、算力调度与安全能力,三行代码实现弹性并发,内置ToolUseAgent支持大模型指令执行,保障数据隔离与安全。
533 5
|
9月前
|
弹性计算 人工智能 固态存储
2026年最新阿里云服务器价格表:轻量、ECS、GPU 服务器费用详解
在云服务器选购中,价格是用户关注的核心因素之一。2026 年阿里云针对不同用户需求,推出了覆盖轻量应用服务器、云服务器 ECS、GPU 服务器的多种套餐,新老用户可根据业务场景选择合适方案,同时享受续费同价等稳定成本福利。以下从核心品类价格、续费政策、附加资源费用三方面,详细梳理最新费用标准。
|
10月前
|
前端开发 安全 算法
区块链 Web3 项目的开发费用
2025年Web3项目开发成本普遍在15万至200万人民币,受合约复杂度、链选择、安全要求及交互深度影响。涵盖MVP、dApp、DeFi等类型,含智能合约、前端集成、审计与Gas费等核心支出,高端项目或跨链部署费用更高。#web3开发 #区块链开发
|
10月前
|
SQL 人工智能 数据可视化
有哪些好用的BI产品适合中小企业?高性价比与免费方案全解析
本文盘点10款主流BI工具,涵盖瓴羊Quick BI、Power BI、Tableau等,聚焦中小企业选型需求。从AI能力、部署方式、适用场景及认证资质多维度对比,助力企业低成本实现数据驱动决策,让数据真正赋能业务增长。(238字)

热门文章

最新文章