自学内容网 自学内容网

short-link笔记

1.@Accessors(chain = true)  

(见于Result类的注解)

不写默认为false,当该值为 true 时,对应字段的 setter 方法调用后,会返回当前对象。

-->可用于链式编程

参:@Accessors 注解详解-CSDN博客

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.短链接修改

  1. del_time添加唯一索引避免分表冲突
  2. 读写锁处理修改时gid变更和访问时stats模块的gid冲突问题
  3. 消息延迟队列处理修改gid时读操作堵塞的问题

读写锁适用于读操作多,写操作少的情况,不用分布式锁是因为访问时只有一个用户能拿到锁

13.创建时使用白名单控制风控 


原文地址:https://blog.csdn.net/fengdongnan/article/details/142314828

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!