天才一秒记住【狂风中文网】地址:https://www.kfzw.net
但这样太简单了。
隨机字符串碰撞怎么办?重复的url要不要復用同一个短码?访问量大的时候资料库扛得住吗?
过了半分钟,他想到了哈希。
把长url用md5或者sha256哈希一下,取前几位作为短码。
但哈希衝突怎么办?再加个盐?还是用布隆过滤器先判断一下?
隨后,陈哲想到了缓存。
高频访问的短码可以放redis里,不用每次都查资料库。
但缓存失效怎么办?缓存雪崩怎么办?
再接著,他想到了分布式。
如果服务做大了,单机扛不住,得用分布式id生成器。
雪花算法?还是用资料库自增id然后取模?
一分钟,他想到了更多。
短码过期怎么办?自定义短码怎么支持?统计点击量怎么实现?防攻击怎么搞?
……
三分钟到。
本的拍手声把陈哲从思考里拉出来。
“行,时间到。”
本说,“谁先来?”
人群安静了一秒。
“我来吧。”
说话的是汤姆。
他往前站了一步,清了清嗓子。
“最简单的设计:一张表,id自增,长url栏位,短码栏位。
短码可以用id的62进位表示,0-9a-za-z,一共62个字符。
id从100000开始,保证至少六位短码。”
他顿了顿。
“优点是简单,不会衝突。
缺点是自增id容易被遍歷,可以加个隨机偏移量。
访问量大的时候加缓存,redis存热点数据。
如果要做大,分库分表,按短码哈希分片。”
他的语气中充斥著自信,毫无疑问这是个比较优越的答卷。
本点了点头,没评价。
“下一个。”
莱拉站出来。
“我会用哈希。
长url做md5,取前六位。
如果衝突了,加个盐重新哈希,或者用布穀鸟哈希的思路。
优点是短码隨机,不容易被猜。
缺点是要处理衝突,性能稍微差点。”
本章未完,请点击下一章继续阅读!若浏览器显示没有新章节了,请尝试点击右上角↗️或右下角↘️的菜单,退出阅读模式即可,谢谢!