针对用户 IP,返回随机 URL,并需要存储 URL 到数据库,这个随机 URL 数据可以每天清空一遍,用什么方案性能最好?

2017-10-11 19:47:02 +08:00
 Loyalsoldier

RT,例如假设,每天有 50W IP 的访问,用户进入网站,会随机返回一个 302 的响应,然后跳转到一个随机的 URL。用户第二次进来,会查询数据库中是否存在该 IP,存在,则跳转到第一次访问的随机 URL。

也就是说,要做一个 IP 和 随机 URL 的映射关系表,这个表数据量很大,假设是 50W,这些数据可以在一天后清除的。怎么做才能尽可能实现高性能,不影响网站用户体验?

目前想到 Redis,但是好像 Redis 每秒只能查询 20W 次?那要遍历 50W 次的话,好像挺久的……

非科班设计师出身,轻喷……

3594 次点击
所在节点    程序员
27 条回复
nazor
2017-10-11 22:34:31 +08:00
每秒查询 20W 是指每秒遍历数据 20 次,不是说一秒只能遍历 20W 的一次……
hand515
2017-10-11 22:45:37 +08:00
这种情况 redis 单机就能处理得过来,才 50w
set ip domain NX EX 24*60*60

get ip
基本只要这两个命令就能解决你的问题
johnnie502
2017-10-12 06:58:27 +08:00
这不是一个存放在客户端的 24 小时过期 cookie 吗?除非有特殊的要求必须放在服务器端,不然放在客户端不就完事了
LeoSocks
2017-10-12 08:35:29 +08:00
那文章写的 11 万次每秒是并发吧!可以支持并发 11 万个用户同时读。而不是 11 万条记录
blaxmirror
2017-10-12 09:28:37 +08:00
直接用 IP+一个每天变化的 seed 做映射不就好了吗?为啥要存储下来呢?
你应该不需要通过 URL 反向查询 IP 的吧?
(并不了解技术细节,仅供参考)
Loyalsoldier
2017-10-12 21:07:45 +08:00
@xmcp #9
@binux #13
@yankebupt #16
@bydmm #18
@dbw9580 #19
@gstqc #20
@hand515 #22
@blaxmirror #25

我原本以为 Redis 的 Hash 是遍历完成查询的,基础不行啊……

最终采用的方案是 Redis。就用 Redis 里简单的 HSET 和 HGET 就好了。过期时间的话,设置了一个定时任务每次自动清理数据。
hand515
2017-10-12 21:30:03 +08:00
@Loyalsoldier #26 别用 hashtable,直接用 set 和 get 命令,配合 expire 设置自动过期,还剩了定时任务

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396886

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX