1 需求
大促节零点时,从关注的用户中抽出N个人进行礼品发放,预计全网超过千万用户参加关注抽奖活动,要求:
2 设计方案
2.1 最原始
rand(),对每行随机产生一个随机数
关注用户表 rand
预计千万级别的对技术倒排大概率凉凉。
2.2 N次随机选择SQL
效率可以,不过要先后执行两条SQL,并发时有原子性问题,且RAND函数不能保证不重复中奖。
offSet = SELECT FLOOR(RAND() * COUNT(*)) AS offset from 关注用户表select * from 关注用户表 limit offset,1
2.3 Redis Set随机弹出
step1:在用户关注直播间在写入MySQL关注用户表时,再往Redis增加一个userlist Set,存储用户编号。可保证用户全局唯一(避免用户反复的取消和关注影响数据记录),且数据基于Hash乱序存储,取出的直接就是随机值。
sadd userlist xxxid
预计用户编号long类型,100万50MB, 1000万用户也仅500MB。
step2:抽奖时,直接使用spop,弹出随机的100个用户编号,该操作是原子性,先弹出再返回,在加上Redist命令队列单线程,不存在并发问题,杜绝重复中奖。
step3:执行1次select in,提取数据,因为都是通过主键提取,效率快也不存在in索引失效问题,但要注意in的数量上限是1000个,超过1000个备选项要拆成多个in。
2.4 纯Redis
内存充足不差钱时可用。因为抽奖结果页面通常只显示用户昵称,还可使用Rdis提速,用内存换时间。
sadd userlist sadd userlist sadd userlist
估算千万用户需3G内存,spop提取速度完全可控制在3ms内完成,且不重复。
Redis不怕Key多,只是怕大Key。测试结果:
1000次pop执行时间2565,即每次 pop 只需 2.5ms。
rundll32.exe应用程序错误如何解决
因为系统中有未注册的dll文件必须注册所有dll文件,才能解决内存不能为read等问题系统dll文件没有注册,可能引起各种各样不可知的问题,比如无法打开二级链接,经常出现“内存不能为read或written”等错误。 如何一下把所有的dll文件重新注册一遍呢?点击:开始-->运行,在运行框中输入cmd,在命令提示符下输入:for %1 in (%windir%\system32\*) do /s %1注意,是在命令提示符下,不是在“运行框”中!! 还有(\和/别输入错了)另种原因:你现将内存拔下来用橡皮擦一下金手指,再插上试一下,如果是接触不良就应该恢复正常,要是内存本身坏了,拿到商家那里也是出问题。 你现用一根试,在换另一根正常的dll文件在网络都可以搜索到其含义。 如果还是不行那只好重做系统了 祝你成功
八.九层高的楼房,住哪一层比较好?
其实每层都有他的优点和缺点,分析一下:一、二层好处就是方便,但是环境吵杂,不安全。 现在城市的扬灰层在离地25米~30米,所以一定不要选八层和九层,在这几层空气不干净。 其他层都还可以,如果家里有老人,尽量住的方便活动,且日照较好的楼层,也就是古语金三银四。 五、六层好坏一半一半啦,如果是我,我选七层,原因如下:第一,七层,不高不低,坐电梯也可以,爬楼梯也可以锻炼身体。 第二,从风水学角度来说,七是个很特殊的数字,经常说七级浮屠、七上八下等等。 第三,可以避开扬灰层的空气污染,又可以得到更多的阳光。 至于具体您选几层,看分析和你的实际情况吧,最后一点,千万别选最高一层的,热~~~!!!
会员体制怎么建立?
会员体制:1、制定入会条件,设有VIP专用服务,区别对待会员与非会员。 2、设置入会期限,会员数量控制。 3、会员等级,享受不同待遇。 4、会员营销,周年答谢,定期举行流行趋势活动。 5、会员回报,实质的回报,抽奖旅游等等
发表评论