前情提要:利用redis的zset數(shù)據(jù)類型可以解決少量用戶實(shí)時(shí)積分排行的問題,但是用戶量達(dá)到百萬級(jí)后,內(nèi)存會(huì)撐不住。
實(shí)時(shí)排名:
如果積分最大值不高,比如說最大5000積分左右,那么可以用桶排序,占用的內(nèi)存不算大。
一個(gè)積分代表一個(gè)桶,每個(gè)桶里面裝了一個(gè)計(jì)數(shù)的數(shù)字。比如(score-10000->10這種k-v鍵值對(duì),表示10000積分的有10個(gè)人)
如果說積分最大值比較高,比如說一百萬,桶排序也會(huì)很占內(nèi)存。那么照這個(gè)思路,可以存數(shù)據(jù)庫,0-50000一個(gè)表,分20個(gè)表,用聚合函數(shù)SUM()協(xié)助統(tǒng)計(jì)每個(gè)表的人數(shù),以此統(tǒng)計(jì)排名。
http://www.cnblogs.com/skywang12345/p/3602737.html
非實(shí)時(shí)排名:
若非實(shí)時(shí)的話,可以每天跑一次數(shù)據(jù)庫,做一張積分排名表。每個(gè)分?jǐn)?shù)對(duì)應(yīng)一個(gè)排名。
非實(shí)時(shí)且只需前10000名:
這個(gè)比較簡單,存數(shù)據(jù)庫或內(nèi)存都可以