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

news/2025/11/7 13:59:23/文章来源:https://www.cnblogs.com/sunplay/p/19199496

升鲜宝生鲜配送供应链管理系统--- 《多语言商品查询优化方案(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.mzph.cn/news/958789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年无风感空调品牌权威推荐榜单:省电空调/小户型空调/防直吹空调源头厂家精选

在追求舒适生活的今天,一股没有直吹感的柔和气流,正是现代空调技术送给家庭的最佳礼物。 无风感空调作为空调领域的技术创新成果,其气流控制技术与舒适度表现直接关系到用户的体验满意度。随着消费者对室内环境舒适…

基于稀疏表示分类器的高光谱图像分类MATLAB实现

基于稀疏表示分类器(Sparse Representation Classifier, SRC)的高光谱图像分类MATLAB实现一、架构 1. 算法流程二、核心代码 1. 数据加载与预处理 %% 数据加载(ENVI格式) hdr = read_envihdr(Indian_pines.hdr); %…

【能源行业案例】借助TeeChart图表库,将地质数据转化为清晰的见解

自2007年以来,GeoLogismiki一直使用TeeChart Pro VCL/FMX图表库将复杂的数据转化为清晰、交互式的图形。将地质数据转化为清晰的见解 GeoLogismiki是一家总部位于希腊的公司,致力于为地质学家、工程师和环境专业人士…

地图上色

地图上色数据源地级市 地区生产总值(GDP)苏州市 26727.00南京市 18500.81无锡市 16263.29南通市 12421.90常州市 10813.60徐州市 10000.00扬州市 7809.64盐城市 7779.20泰州市 7020.95镇江市 5540.01淮安市 5413.02宿…

TCP快速打开TFO

以上仅供参考,如有疑问,留言联系

2025年双出风中央空调品牌权威推荐榜单:中央空调选购/省电中央空调/6赫兹中央空调源头厂家精选

在现代家居与商业空间中,一股柔和而均匀的气流往往是衡量空调系统品质的隐形标尺。 随着人们对室内环境舒适度要求的不断提高,双出风中央空调以其优越的气流分布能力和温度控制精度,正成为高端住宅和商业空间的首选…

模拟赛SXJ202511061800比赛记录题解

题目请看 最近被一些模拟赛蹂躏了,这场是来思路来的最快的一场比赛T1So easy,but...很简单,判差值和数量即可,我却漏了细节,82point,磕细节磕了1h,才想出正解,64行贴一下代码 /* User:Kevinrzy103874 Uid:72 Ag…

2025年山东开锁培训学校权威推荐榜单:汽车开锁培训/开锁技术培训/培训汽车开锁源头机构精选

一把钥匙开一把锁,但一名专业的锁匠却能开启千百种锁具,这背后是系统化培训与专业技能的结晶。 随着社会对专业开锁服务需求的日益增长,锁具修理工已成为现代城市服务中不可或缺的技术工种。据统计,中国锁具行业年…

2025年绝缘油滤油机直销厂家权威推荐榜单:润滑油滤油机/真空抽气机组/透平油滤油机设备源头厂家精选

在电力、冶金、石化等工业领域,一滴纯净的绝缘油是设备安全运行的命脉,而滤油机正是这命脉的守护者。 绝缘油滤油机作为工业油品净化的关键设备,其技术水平与过滤精度直接关系到大型机械设备的运行安全与使用寿命。…

国产化文档开发组件Spire.Office 10.10 全新发布!多项文档处理能力重磅升级

近日,国产化文档开发组件Spire.Office 同步更新 .NET和 Java 版本至10.10.0 !本次更新带来了多项全新功能与性能优化,为开发者提供更强大、更高效的文档、表格、PDF、演示文稿处理能力。近日,知名国产化文档开发组…

K8S(一)—— 云原生与Kubernetes(K8S)从入门到实践:基础概念与处理全解析

K8S(一)—— 云原生与Kubernetes(K8S)从入门到实践:基础概念与处理全解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

fastutil 实战指南:用原始类型集合把性能“薅满”

当你在 Java 里用 `Map<Integer, Double>`、`Set<Long>`、`List<Integer>` 处理大数据,会被装箱/拆箱与对象头开销“慢到怀疑人生”。fastutil 针对每种原始类型提供成套集合与工具(int/long/doub…

如何在关闭浏览器标签前,可靠地发送 HTTP 请求? - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Python 必背内置函数

一、输出与输入类 print() : 打印输出给定内容。示例:print("Hello, Python!") #输出 Hello, Python!input() :接收用户输入并返回字符串。示例:age = input("请输入年龄:") 输入 18 后, ag…

实用指南:【Java并发】深入理解synchronized

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年发电机厂家权威推荐榜:柴油发电机组/康明斯/玉柴/高压/大功率发电机,专业选购指南与实力解析

一、行业背景与发展趋势随着我国工业化进程的加速推进,发电设备行业作为国民经济的重要基础产业,正迎来新一轮发展机遇。特别是在"双碳"目标背景下,发电机组行业正朝着高效节能、智能控制、环保低碳的方向…

2025年磷酸氢二钾定制厂家权威推荐榜单:磷酸氢二钠/磷酸二氢钠/磷酸源头厂家精选

在食品加工、医药制造与工业水处理等领域,磷酸氢二钾及其相关磷酸盐作为重要的功能添加剂与化学中间体,其质量稳定性与定制化服务能力已成为下游用户的核心关注点。行业数据显示,2024年中国磷酸盐市场规模已突破200…

P2P CDN Tracker 技术深度解析(三):会话管理与心跳机制

在支持100万+并发连接的P2P系统中,如何高效管理用户会话、及时检测失效连接、合理回收资源?本文深入剖析Tracker的"生命线"——会话管理与心跳机制。前情回顾 在第1篇中,我们了解了Tracker的整体架构;第…

2025年发电机厂家推荐排行榜,发电机组,柴油发电机组,康明斯发电机,玉柴发电机,高压发电机,大功率发电机公司精选

一、行业背景与发展趋势随着全球能源转型加速和电力需求持续增长,发电设备行业正迎来新一轮技术变革。在工业制造、数据中心、医疗设施、商业建筑等领域,发电机组作为重要的备用电源和主力电源,其技术水平和产品质量…

Modbus Tcp协议

Modbus Tcp协议Posted on 2025-11-07 13:35 懒得理 阅读(0) 评论(0) 收藏 举报⚠️RX 最后的 4/N 个数据字节(xx xx xx xx / xx xx xx xx)是举例的伪数据, 实际内容由设备当前状态决定。 [1]读取输出线圈 功能…