前情提要:利用redis的zset數(shù)據(jù)類型可以解決少量用戶實時積分排行的問題骂倘,但是用戶量達到百萬級后颅筋,內(nèi)存會撐不住膜钓。
實時排名:
如果積分最大值不高效五,比如說最大5000積分左右,那么可以用桶排序滓玖,占用的內(nèi)存不算大。
一個積分代表一個桶,每個桶里面裝了一個計數(shù)的數(shù)字侥衬。比如(score-10000->10這種k-v鍵值對,表示10000積分的有10個人)
如果說積分最大值比較高跑芳,比如說一百萬轴总,桶排序也會很占內(nèi)存。那么照這個思路博个,可以存數(shù)據(jù)庫怀樟,0-50000一個表,分20個表盆佣,用聚合函數(shù)SUM()協(xié)助統(tǒng)計每個表的人數(shù)往堡,以此統(tǒng)計排名。
http://www.cnblogs.com/skywang12345/p/3602737.html
非實時排名:
若非實時的話共耍,可以每天跑一次數(shù)據(jù)庫虑灰,做一張積分排名表。每個分數(shù)對應一個排名征堪。
非實時且只需前10000名:
這個比較簡單瘩缆,存數(shù)據(jù)庫或內(nèi)存都可以