short-link笔记
1.@Accessors(chain = true)
(见于Result类的注解)
不写默认为false,当该值为 true 时,对应字段的 setter 方法调用后,会返回当前对象。
-->可用于链式编程
2.关键信息脱敏
利用将class通过jackon序列化为JSON返回给前端,定义序列化处理器,在需要处理的字段上添加注解即可实现关键信息脱敏
3.mp提供bean属性填充
4.业务改造---hash算法随机生成短链接
原字符串越长,生成的短链接重复概率越小.因此原本采用原网址+System.currentTimeMillis()拼接的方式.但是在短时间内大量请求涌入的情况下,该策略失效.
因此采用原网址+UUID.randomUUID()的方式
5.业务---数据库分表数据的修改
单表修改直接修改即可,分表则需要判断分片键是否变更,如果变了则需要删除原有记录,插入新记录
6.疑问---post和put的区别
7.业务---短链接的有效期处理
短链接跳转中,从数据库查出短链接数据存入缓存时,先判断有效期是否过期,如果过期则存储null值到redis
8.业务---短链接缓存穿透
采用分布式锁+双重锁防止冲击数据库和后续业务堵塞
9.业务---短链接缓存击穿
布隆过滤器+null值缓存
先在布隆过滤器中判断,针对错判情况,再到null值缓存中查找,没有在进入数据库,如果没查到则缓存null值到缓存,形成布隆过滤器的兜底
10.业务---监控统计uv访问数
如何应对用户恶意修改cookie攻击数据库的行为
11.redis+mysql实现高频访问ip的记录
原业务将完整短链接和访问ip记录到一张sql表,再通过group和limit实现
12.短链接修改
- del_time添加唯一索引避免分表冲突
- 读写锁处理修改时gid变更和访问时stats模块的gid冲突问题
- 消息延迟队列处理修改gid时读操作堵塞的问题
读写锁适用于读操作多,写操作少的情况,不用分布式锁是因为访问时只有一个用户能拿到锁
13.创建时使用白名单控制风控
原文地址:https://blog.csdn.net/fengdongnan/article/details/142314828
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!