type
status
date
slug
summary
tags
category
titleIcon
password
icon
calloutIcon
Validated自定义AOP
两种异常 Advice全局异常处理
@RestControllerAdvice
@ExceptionHandler
(
ValidationException
.class)
@Resource @Autowired
Java标准vs Spring标准

Nacos配置共享与覆盖
单机日志logback.xml
通过加入一个@Builder
会出现以下错误
数值没用枚举 在范围内其他暂无意义的值可以随便插入()
实际上并没有多个

(多条记录实现 但共用一套模版时?)
新增或更新运费模板业务修改
业务思路补充解释:
假设传过来id为1类型为B的记录:
有id→修改行为 查询id≠1的所有B类型记录 没有插入
有则判断 如果是非经济区 即为重复
场景为:id为1类型为A的记录 希望修改为B类型 但B类型已存在 拒绝修改
存在问题:如果是经济区更新操作,数据库已有的关联城市为2,本次修改为2,3,修改就是不可能(经济区可以接受多个关联城市)。
如果传入2,3 则因为交集 被拒绝修改
如果传入3 会按照覆盖更新处理,会2 → 3
应该每次传入DTO后排序关联城市List,最后join成字符串保存,这样交集的逻辑就改为字符串相等判断,此场景下传入2,3更新直接覆盖2

根据体积参数与实际重量计算计费重量
业务规则引擎
职责链模式
缓存 id 大key数据
缓存重复(A→B B→A)需要对组合进行排序
若加入自定义 不可用 同时查询两个
Day02练习参考
删除
缓存与自定义模版
并发计算压力
带宽占用
服务端hutool base64 → 客户端生成
UT测试结果
Redis数据结果
更新后删



职责链模式确定模板
引入依赖与配置

设计思路
1.上下文:除开同城模版,其他模板的处理链都需要使用寄与收的省份Id,要避免链上每个节点请求Redis,在原本的DTO对象包装一层上下文,用于存放两个省份Id,只在第一次需要使用时进行请求(职责链里的共享状态)。
2.后续的运费计算中只涉及到三个字段的使用,也不存在修改的需求,只筛选出所需要用到的字段转JSON字符串存储Redis。
3.缓存一致性,修改saveOrUpdateDTO方法更新数据库后删除模板缓存(城市id到省份id映射一般不变)。原则上可以暂缓请求
4.可能的缓存穿透,由于修改并不频繁重复更新不会引起数据错误,但更新Redis操作目前没有上锁,可能使得并发下热点城市更新线程较多。
5.缓存内容:a.城市Id到省份Id映射 b.以类型+运输类型+关联城市为key对应的模板数据(三个字段)
实现
相关UT与效果
UT
1.创建上海与安徽合肥间的跨省模板(自定义类型)
2.更新上海与安徽合肥间的跨省模板

执行效果



Redis相关数据
城市到省份映射x2 + 模板数据x1 均为string类型

删除缓存后

城市到省份映射
前缀+城市id为key 省份id为value
上海

安徽合肥

模板数据

MySQL数据


- 作者:CamelliaV
- 链接:https://camelliav.netlify.app/article/slwl-day02
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章