当前位置: 首页 > 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.zskr.cn/news/42875.html

相关文章:

  • 【能源行业案例】借助TeeChart图表库,将地质数据转化为清晰的见解
  • 2025年双出风中央空调品牌权威推荐榜单:中央空调选购/省电中央空调/6赫兹中央空调源头厂家精选
  • 2025年磷酸氢二钾定制厂家权威推荐榜单:磷酸氢二钠/磷酸二氢钠/磷酸源头厂家精选
  • 2025年发电机厂家推荐排行榜,发电机组,柴油发电机组,康明斯发电机,玉柴发电机,高压发电机,大功率发电机公司精选
  • 抖音 独立 IP 解决方案:独享静态住宅 IP + 环境隔离 + 粘性会话 - Smart
  • MySQL——表的管理
  • 【传奇开心果系列】基于Flet框架实现的分析题型的掌握程度不同题型得分饼图样式示例自定义模板特色和完成原理深度解析
  • 【MySQL】SQL调优-如何分析SQL性能 - 指南
  • asp.net网站编译后出现“发现不明确的匹配”的错误
  • Docker 部署 Oracle Linux 实操全流程
  • Redis Key 命名规范文档(含图表与命名规则)
  • 联想瑞天500无法禁用安全启动的解决办法
  • AI可能的发展
  • 【2025年】撕碎机厂家信息:华东固废处理五强榜单
  • 【2025年膨润土厂家信息:华东高纯钠基五强榜单】
  • LLMOps+DeepSeek:大模型赋能一体化运维
  • 2025年200元左右美白精华产品推荐:基于成分与肤感的权威对比榜
  • LRU缓存科普与实现(Kotlin 与 Swift) - 实践
  • 十六、Linux网络基础理论 - OSI模型、TCP/IP协议与IP地址详解 - 教程
  • 飞牛OS Root用户SSH公钥登录完整教程
  • 红黑树简
  • ⸢ 柒-Ⅲ⸥⤳ 可信纵深防御建设方案:数据使用可信端安全可信 - 详解
  • AI在开源情报搜集系统中的应用汇总
  • 升鲜宝生鲜配送供应链管理系统---PMS--商品品牌多语言存储与 Redis 缓存同步实现
  • Python环境教程(三)-环境高级之uv pixi
  • 升鲜宝生鲜配送供应链管理系统---PMS 商品模块 + 动态翻译设计说明
  • 深入浅出 SPA/MPA
  • CPP 学习笔记 语法总结 - 阿源
  • 深入解析:大数据集群环境搭建(Ubantu)
  • Unity Shader 入门教程:从零开始编写你的第一个 Shader