mysql查詢學員名單,如何設計一個百萬級用戶的抽獎系統?
這個問題有點意思。但是你的問題過于籠統,不好回答。
首先,你的抽獎名單數據是如何存儲的,還是一個全新的系統,單純就是一個抽獎系統?一次抽獎多少個?
現在就說個比較簡單的情況,假設:你的抽獎名單全部在一個表里面存儲,里面有一百萬條數據,要一次性抽中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是版本,安裝過程也不復雜。
希望我的回答能幫到您!