客户端-->发出短链接请求--> 重定向跳转 -->长链接
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)中,消费者可以使用 XREAD
或 XREADGROUP
命令从流中读取消息。XREAD
适用于单个消费者独立消费消息,XREADGROUP
用于消费者组消费,消费者组可以实现消息的负载均衡,确保每条消息只被组内一个消费者处理。消费者处理完消息后,使用 XACK
命令确认消息,Redis 会将该消息标记为已处理。