日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
千萬級用戶ms級抽獎N名設(shè)計方案

1 需求

大促節(jié)零點時,從關(guān)注的用戶中抽出N個人進行禮品發(fā)放,預計全網(wǎng)超過千萬用戶參加關(guān)注抽獎活動,要求:

  • 同一用戶不能重復參與
  • 同一用戶不允許二次中獎

2 設(shè)計方案

2.1 最原始

rand(),對每行隨機產(chǎn)生一個隨機數(shù)

select * from 關(guān)注用戶表 order by rand() desc limit,0,100

預計千萬級別的對技術(shù)倒排大概率涼涼。

2.2 N次隨機選擇SQL

效率可以,不過要先后執(zhí)行兩條SQL,并發(fā)時有原子性問題,且RAND函數(shù)不能保證不重復中獎。

offset = SELECT FLOOR(RAND() * COUNT(*)) AS offset from 關(guān)注用戶表
select * from 關(guān)注用戶表 limit offset,1

2.3 Redis Set隨機彈出

step1:在用戶關(guān)注直播間在寫入MySQL關(guān)注用戶表時,再往Redis增加一個userlist Set,存儲用戶編號??杀WC用戶全局唯一(避免用戶反復的取消和關(guān)注影響數(shù)據(jù)記錄),且數(shù)據(jù)基于Hash亂序存儲,取出的直接就是隨機值。

sadd userlist xxxid

預計用戶編號long類型,100萬50MB, 1000萬用戶也僅500MB。

step2:抽獎時,直接使用spop,彈出隨機的100個用戶編號,該操作是原子性,先彈出再返回,在加上Redist命令隊列單線程,不存在并發(fā)問題,杜絕重復中獎。

step3:執(zhí)行1次select in,提取數(shù)據(jù),因為都是通過主鍵提取,效率快也不存在in索引失效問題,但要注意in的數(shù)量上限是1000個,超過1000個備選項要拆成多個in。

 2.4 純Redis

內(nèi)存充足不差錢時可用。因為抽獎結(jié)果頁面通常只顯示用戶昵稱,還可使用Rdis提速,用內(nèi)存換時間。

sadd userlist '123456:ikun'
sadd userlist '123456:akun'
sadd userlist '123456:bkun'

估算千萬用戶需3G內(nèi)存,spop提取速度完全可控制在3ms內(nèi)完成,且不重復。

Redis不怕Key多,只是怕大Key。測試結(jié)果:

1000次pop執(zhí)行時間2565,即每次 pop 只需 2.5ms。


網(wǎng)頁題目:千萬級用戶ms級抽獎N名設(shè)計方案
分享URL:http://www.5511xx.com/article/cdecdjp.html