Bootstrap

短链接项目思考

客户端-->发出短链接请求--> 重定向跳转 -->长链接

301:永久重定向,下次直接从浏览器缓存拿到长链接即可

两者都是HTTP协议当中的状态码

302:临时重定向 每次请求都会请求短链接服务器,浏览器不会缓存。

1.短链接是如何根据原链接生成的

将长链接通过一定的算法转换成短链接,访问短链接实际上是访问短链接服务器,根据短链接的参数找到长链接重定向跳转

短链算法模块+哈希表

短的URL当作key,长的URL作为value,保存到hash表当中

算法:MD5 从一个字符串或一个文件中按照一定的规律生成一个特殊的字符串。输出是128位的

MurmurHash:随机分布特征表现更良好,发生 Hash 碰撞的几率更低。比起 MD5它的性能至少提升了一个数量级。生成的结果为32bit或64bit相比MD5的长度缩短了一个量级。

对murmurhash的结果做62位的编码

原始链接-->murmurhash-->10进制数-->62编码的数

2.如何解决哈希冲突

布隆过滤器 有冲突的话 给原始链接加一个随机字符串

分库分表的key可以使用短链key来计算hash,通过一致性 Hash 算法把记录路由到对应的分表

通过redis stream实现消息队列

Redis Stream 是 Redis 5.0 引入的一种新数据类型,能很好地实现消息队列的功能。

Redis Stream 是一个持久化的、支持多播的消息队列。生产者通过 XADD 命令将消息添加到流(Stream)中,消费者可以使用 XREADXREADGROUP 命令从流中读取消息。XREAD 适用于单个消费者独立消费消息,XREADGROUP 用于消费者组消费,消费者组可以实现消息的负载均衡,确保每条消息只被组内一个消费者处理。消费者处理完消息后,使用 XACK 命令确认消息,Redis 会将该消息标记为已处理。