当前位置: 首页 > news >正文

升鲜宝生鲜配送供应链管理系统--- 《多语言商品查询优化方案(Redis + 翻译表 + 模糊匹配)》

升鲜宝生鲜配送供应链管理系统--- 《多语言商品查询优化方案(Redis + 翻译表 + 模糊匹配)》
一、方案概述

本方案旨在实现商品模块的多语言查询与显示一体化。通过结合 Redis 缓存与数据库翻译表(sys_dynamic_translation),实现以下目标:

  1. 用户可根据当前语言环境进行多语言关键词搜索。
  2. 查询结果自动返回对应语言的名称与属性。
  3. 优先从 Redis 读取翻译缓存,无缓存则从数据库读取并写回 Redis。

二、查询流程图

用户输入 keyword="Salmon"


Redis hGetAll("i18n:pms_goods:en-US")
│ 命中 → [1001]

WHERE goods_id IN (1001)


数据库分页查询 pms_goods 表


结果 → 显示 goodsName=Salmon(Redis翻译值)

三、Redis Key 结构
模块 Redis Key 示例 结构 缓存字段
商品信息 i18n:pms_goods:{lang} Hash<goodsId, goodsName> goodsName, goodsMaterial
品牌信息 i18n:pms_brand:{lang} Hash<brandId, brandName> brandName
分类信息 i18n:pms_goods_category:{lang} Hash<categoryId, categoryName> categoryName
材质信息 i18n:pms_goods_material:{lang} Hash<materialId, materialName> materialName
单位信息 i18n:pms_goods_unit:{lang} Hash<unitId, unitName> unitName
规格信息 i18n:pms_goods_sku:{lang} Hash<skuId, skuName> skuName
四、多语言匹配代码模板
以下为多语言模糊查询模板代码示例:

String lang = LanguageContextHolder.getLanguage();
String keyword = query.getGoodsName();

if (StringUtils.isNotBlank(keyword)) {
List matchedIds = new ArrayList<>();
String redisKey = "i18n:pms_goods:" + lang;
Map<String, Object> allTranslations = redisUtils.hGetAll(redisKey);

// ① 优先从 Redis 匹配
if (MapUtils.isNotEmpty(allTranslations)) {for (Map.Entry<String, Object> entry : allTranslations.entrySet()) {if (entry.getValue() != null && entry.getValue().toString().toLowerCase().contains(keyword.toLowerCase())) {matchedIds.add(Long.valueOf(entry.getKey()));}}
}// ② Redis 无 → 查数据库
if (matchedIds.isEmpty()) {List<SysDynamicTranslationEntity> translations =sysDynamicTranslationService.selectSysDynamicTranslationListByFieldValueLike("pms_goods", lang, "goodsName", keyword);if (CollectionUtils.isNotEmpty(translations)) {matchedIds = translations.stream().map(SysDynamicTranslationEntity::getEntityId).distinct().collect(Collectors.toList());}
}// ③ 将匹配结果加入查询条件
if (CollectionUtils.isNotEmpty(matchedIds)) {query.getEntityIdList().addAll(matchedIds);
}

}

五、查询与显示一体化方案(伪代码)

// Step 1: 处理查询条件
List matchedIds = i18nMatchService.findEntityIdsByKeyword("pms_goods", "goodsName", query.getGoodsName(), lang);
if (!matchedIds.isEmpty()) {
query.getEntityIdList().addAll(matchedIds);
}

// Step 2: 执行分页查询
List goodsList = pmsGoodsDao.findPmsGoodsNewPage(query);

// Step 3: 国际化字段填充
for (RespPmsGoodsPageNewDTO dto : goodsList) {
dto.fillI18nFields(redisUtils, sysDynamicTranslationService);
}

// Step 4: 返回分页结果
return new PageData<>(goodsList, page.getTotal());

六、性能优化要点

  1. Redis 命中率高,查询性能提升 10~20 倍。
  2. 模糊匹配优先 Redis,避免频繁 SQL 查询。
  3. 缓存更新机制:新增/修改商品、品牌、分类时自动更新对应语言缓存。
  4. 支持所有模块(品牌、分类、材质、单位)通用复用。
  5. 降级策略:Redis 不命中时自动回退数据库翻译表。
http://www.jsqmd.com/news/34217/

相关文章:

  • 2025年无风感空调品牌权威推荐榜单:省电空调/小户型空调/防直吹空调源头厂家精选
  • 基于稀疏表示分类器的高光谱图像分类MATLAB实现
  • 【能源行业案例】借助TeeChart图表库,将地质数据转化为清晰的见解
  • 地图上色
  • TCP快速打开TFO
  • 2025年双出风中央空调品牌权威推荐榜单:中央空调选购/省电中央空调/6赫兹中央空调源头厂家精选
  • 模拟赛SXJ202511061800比赛记录题解
  • 模拟赛SXJ202511061800比赛记录题解
  • 2025年山东开锁培训学校权威推荐榜单:汽车开锁培训/开锁技术培训/培训汽车开锁源头机构精选
  • 2025年绝缘油滤油机直销厂家权威推荐榜单:润滑油滤油机/真空抽气机组/透平油滤油机设备源头厂家精选
  • 国产化文档开发组件Spire.Office 10.10 全新发布!多项文档处理能力重磅升级
  • K8S(一)—— 云原生与Kubernetes(K8S)从入门到实践:基础概念与处理全解析
  • fastutil 实战指南:用原始类型集合把性能“薅满”
  • 如何在关闭浏览器标签前,可靠地发送 HTTP 请求? - 详解
  • Python 必背内置函数
  • 实用指南:【Java并发】深入理解synchronized
  • 2025年发电机厂家权威推荐榜:柴油发电机组/康明斯/玉柴/高压/大功率发电机,专业选购指南与实力解析
  • 2025年磷酸氢二钾定制厂家权威推荐榜单:磷酸氢二钠/磷酸二氢钠/磷酸源头厂家精选
  • P2P CDN Tracker 技术深度解析(三):会话管理与心跳机制
  • 2025年发电机厂家推荐排行榜,发电机组,柴油发电机组,康明斯发电机,玉柴发电机,高压发电机,大功率发电机公司精选
  • Modbus Tcp协议
  • 高频电流探头在电源质量与谐波分析中的应用
  • 抖音 独立 IP 解决方案:独享静态住宅 IP + 环境隔离 + 粘性会话 - Smart
  • Cursor 2.0 扩展 Composer 功能,助力上下文感知式开发 - 公众号
  • 【传奇开心果系列】基于Flet框架实现的分析题型的掌握程度不同题型得分饼图样式示例自定义模板特色和完成原理深度解析
  • Linux命令总览
  • 量化选股与量化交易第819篇:大单短线量化指标公式 - Leone
  • 【MySQL】SQL调优-如何分析SQL性能 - 指南
  • asp.net网站编译后出现“发现不明确的匹配”的错误
  • 量化选股与量化交易第820篇:趋势突破K线均线平台指标公式 - Leone