选主机测评网
主机测评优惠网

如何设计一个百万级用户的抽奖系统

这个问题有点意思。但是你的问题过于笼统,不好回答。

如何设计一个百万级用户的抽奖系统

首先,你的抽奖名单数据是如何存储的,还是一个全新的系统,单纯就是一个抽奖系统?一次抽奖多少个?

如何设计一个百万级用户的抽奖系统

现在就说个比较简单的情况,假设:你的抽奖名单全部在一个表里面存储,里面有一百万条数据,要一次性抽中500人。

如何设计一个百万级用户的抽奖系统

我的设计思路就是:

如何设计一个百万级用户的抽奖系统

首先利用循环把100万条数据插入redis缓存服务器后,插入过程肯定是比较慢的,因为是从数据库读入到redis缓存。读入完成后,再使用随机函数,随机抽取[0-100)的整数,直接通过index进行索引,快的时候,不用一秒就能命中数据。所以很轻松的解决了100万数据的索引速度慢的问题。

下图就是100w数据通过redis命中某条数据的速度,可参考以下:

命中了数据之后,为了防止重复命中,当然同时应该使用另外一个redis库表存储好命中的结果id,每抽一次数据就跟命中结果比较,存在则重新抽,直到500个不重复的数据抽满为止。

最后把命中的结果更新到数据库(如mysql server或者mssql server 等) 进行固化保存。

另外给你介绍一个我使用的redis工具,方便你参考处理:

redis 存储的数据类型,可以是整数,字符串,数组,json等,我下面用的是json,你可用key及value 均存储用户的id号即可:

下面存储是数组:

具体如何安装redis,可用百度一下,有window是版本,安装过程也不复杂。

希望我的回答能帮到您!

未经允许不得转载:选主机测评网 » 如何设计一个百万级用户的抽奖系统
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址