短网址服务系统 设计
2016-03-17 12:13
309 查看
我的方案是:用key-value存储,保存“最近”生成的长对短的一个对应关系。注意是“最近”,也就是说,我并不保存全量的长对短的关系,而只保存最近的。比如采用一小时过期的机制来实现LRU淘汰。
这样的话,长转短的流程变成这样:
在这个“最近”表中查看一下,看长地址有没有对应的短地址
有就直接返回,并且将这个key-value对的过期时间再延长成一小时
如果没有,就通过发号器生成一个短地址,并且将这个“最近”表中,过期时间为1小时
所以当一个地址被频繁使用,那么它会一直在这个key-value表中,总能返回当初生成那个短地址,不会出现重复的问题。如果它使用并不频繁,那么长对短的key会过期,LRU机制自动就会淘汰掉它。
当然,这不能保证100%的同一个长地址一定能转出同一个短地址,比如你拿一个生僻的url,每间隔1小时来转一次,你会得到不同的短地址。但是这真的有关系吗?
这样的话,长转短的流程变成这样:
在这个“最近”表中查看一下,看长地址有没有对应的短地址
有就直接返回,并且将这个key-value对的过期时间再延长成一小时
如果没有,就通过发号器生成一个短地址,并且将这个“最近”表中,过期时间为1小时
所以当一个地址被频繁使用,那么它会一直在这个key-value表中,总能返回当初生成那个短地址,不会出现重复的问题。如果它使用并不频繁,那么长对短的key会过期,LRU机制自动就会淘汰掉它。
当然,这不能保证100%的同一个长地址一定能转出同一个短地址,比如你拿一个生僻的url,每间隔1小时来转一次,你会得到不同的短地址。但是这真的有关系吗?
相关文章推荐
- 安卓五子棋(1)
- 路径函数
- 复利计算器1.0,2.0,3.0
- Fleet Commander项目启动流程
- Linux进程间共享内存机制
- ViewPager子页面的点击事件监听
- MP4(一)-结构
- 初步认识hibernate-----第二篇
- spider for doubantop250 -- scrapy框架
- 重温javascript---方法(array)
- Gradle 1.12 翻译——第十三章 编写构建脚本
- 每周数据结构【2】:删除带头结点的含有x的值的节点
- Untiy PoolManager随手记
- 查看linux是否是虚拟机
- Flask web开发 处理Session
- [leetcode] 271. Encode and Decode Strings 解题报告
- CUBRID学习笔记 28 执行sql脚本文件
- C#基本语法学习(五)
- Android 检查设备是否存在 导航栏 NavigationBar
- python中if __name__ == '__main__': 的解析