搜索、缓存与索引

本文整理 DGJ2.0 商品搜索、物料缓存、Redis、Mongo、ES 和缓存刷新任务。排查“搜索不到”“列表数据旧”“库存/价格展示不一致”时按本文定位。

业务目标

  • 区分哪些数据来自业务库,哪些来自缓存或索引。
  • 知道商品、物料、价格、服务站库存相关缓存在哪里刷新。
  • 避免只改数据库却忘记刷新缓存。

入口文件

  • ES 服务:application/Services/Cache/EsSer.php
  • 物料缓存:application/Services/Materiels/*
  • 商品缓存任务:application/controllers/tasks/GoodsCache.php
  • ES 缓存任务:application/controllers/tasks/GoodsEsCache.phpUpdateEsGoodsInfo.php
  • 缓存管理:application/controllers/inner/CacheManage.php
  • Redis key:application/KzData/Enums/RedisKeys.php
  • Mongo 缓存:application/Components/Cache/MongoCache.php

常见缓存类型

| 类型 | 用途 | 常见风险 | | --- | --- | --- | | Redis | 黑名单、仓库、服务站配置、部分业务缓存 | 旧 key 未删除、TTL 不一致 | | ES | 商品搜索、物料查询、帮助中心搜索 | 索引延迟、字段未同步 | | Mongo | 大对象/搜索类缓存 | 数据旧、集合口径不明 | | 本地文件/CI cache | 配置或临时缓存 | 发布后旧缓存残留 | | 业务表聚合 | 热销、最近采购、销售记录 | 异步任务延迟 |

商品搜索排查

  1. 查商品主数据:t_bs_goodst_bs_goods_ext
  2. 查价格和可售限制:t_bs_goods_purprice、销售限价、限购。
  3. 查服务站仓库/库存:t_bs_goods_stot_scm_inventory_real_time
  4. 查 ES/物料缓存是否包含该商品。
  5. 查缓存刷新任务是否执行。

物料缓存排查

物料缓存相关服务集中在:

  • MaterielCacheSer.php
  • MaterielCacheQuerySer.php
  • MaterielCacheQueryEsSer.php
  • MaterielCacheStationSer.php
  • MaterielCacheStationEsSer.php
  • MaterielFrontCacheSer.php
  • BuyLimitSkuCacheSer.php
  • HasPriceSkuCacheSer.php

服务站侧查询要特别注意:全局物料缓存和服务站物料缓存不是一个口径,是否有价格、是否限购、是否能售卖都会影响结果。

缓存刷新原则

  • 商品基础数据变更后,刷新商品缓存和 ES。
  • 价格变更后,刷新服务站物料价格相关缓存。
  • 限购、套包、敏感词由商品中心消息同步后,要刷新对应缓存。
  • 菜单/权限规则变更后,刷新 Redis 黑名单和规则缓存。
  • 库存问题优先查业务库,缓存只解释“展示旧”的原因。

常用 rg 命令

rg -n "class .*Cache|MaterielCache|EsSer|MongoCache|RedisKeys" application/Services application/Components application/KzData
rg -n "GoodsCache|GoodsEsCache|UpdateEsGoodsInfo|GoodsCacheFlush" application/controllers/tasks
rg -n "itemcenter_item_price_enable|itemcenter_package_status_sync|sensitive_word" application/controllers/tasks application/KzData/Enums
rg -n "KzCache::getInstance|hGet|hSet|set\\(|del\\(" application/Services application/service application/controllers | head

改动风险和回归清单

  • 商品搜索:关键字、品牌、分类、车型、服务站维度。
  • 采购商品列表:可买、价格、库存、限购。
  • 销售商品列表:可卖、售价、库存、客户价。
  • 活动商品:活动价、库存、黑白名单、状态。
  • 缓存刷新:立即刷新、异步任务刷新、失败重试。