今天胡乱看看到了一个很长时间的设计题,表达一…
2018-06-22 05:27:29来源:未知 阅读 ()
设计任务:
1、最近总有人骚扰我们的投票模块,需要你来设计一个投票限制的东东
要求如下:
1)要求每个QQ号码(假设此QQ号码在UNIT32 内可以表示)10分钟这内只能投5票。
2)我们的用户很踊跃,平均每天要有2000万人左右通过此程序投票。
说明:
1)无需写代码,只需要图跟文字即可。
2)对于关键逻辑,请用图加代码表示出来,这也是对你文字表达能力的一个考验。
3)对你能想到的所有的边界条件列出来,这是对你逻辑思维全面与敏捷性的考验。
4)存储部分,尽你所能吧。如果,你需要一个自己设计的存储层,那么把这个存储层的实现,用文字+图片方式描述清楚,要是设计合理,你会获得华丽的奖分。
解:
1)核心问题:如何统计10分钟之内投了5票? 平均每天 2000万
>10分钟可以分解成 60*10 s
>每秒qps(请求量) 以二八分法 :(20000000*80%)/(86400*20%) ≈1000 (925) 按1000算 , Redis读写性能测试redis官网测试读写能到10万左右 redis 足够用了
2.如何和存
>10分钟以内就 设置成10分钟过期
>10分钟不能超过5次 10分钟以外就不用管了
>预估数据量:600*1000*5=300万 10分钟内数据量 300w左右(10分钟以前的都自动过期了)
>key值带上分钟和秒:比如:1234567891(QQ号) 123456789 + 当时的分秒 (0809)=123456789:0809 ,10分钟以内 这个数字不会重复的
3.每次投票前
>计算 : keys 123456789:* 返回多少个数据, 计算有多少个值 如果大于5个就返回 10分钟超过5次请等一会再投!
还有没有其他好的方法,有不足的地方请大家指正~~~~
2.谢谢评论的园友给的改进意见更改如下
1.每个QQ号每次访问设置一个自动增涨的值: set 12345678 0 ; EXPIRE 12345678 600 ;INCR 12345678;
2.如果每次查询 12345678 存在就 对比个数有没有大于5 大于 返回 10分钟超过5次请等一会再投! 不大于 就 INCR 12345678 增加1
3.key每十分钟会过期
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 使用Linux的经验技巧 2020-02-13
- PHP缓存技术的方法 2019-09-23
- 小白建设一个网站需要什么资料?完整网站建设流程今天告诉你 2019-07-23
- php实现命令行里输出带颜色文字 2019-07-23
- php高并发之opcache 2019-05-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash