鍍金池/ 問答/人工智能  Java  PHP  Python  HTML/ 關(guān)于幾百萬用戶量下redis排行榜設(shè)計

關(guān)于幾百萬用戶量下redis排行榜設(shè)計

1.想做一個用戶金幣排行榜,顯示的話就只顯示最高的100條記錄
2.談到用redis做排行榜多數(shù)會想到用sorted set來做。但是假如有幾百萬用戶,并且日活幾十萬的情況下,把所有數(shù)據(jù)都放在redis上的話就有點多了。
3.合理做法是不是應(yīng)該先用數(shù)據(jù)庫把用戶的信息存起來,更新操作都在數(shù)據(jù)庫上,然后定時從數(shù)據(jù)庫里譬如取100條數(shù)據(jù)出來放在sorted zet讓用戶讀取比較合理?這樣內(nèi)存消耗和redis服務(wù)器寫操作就比較低
4.另外一方面,如何考量數(shù)據(jù)量是否太大或者IO操作太頻繁,而不適合放到redis上呢?

回答
編輯回答
若相惜

因為你只需要顯示前100名,所以用一個最小堆就可以了。

Redi可以用sorted set加一個key保存第100名的積分,數(shù)據(jù)庫更新用戶積分后,先判斷是否比當(dāng)前第100名高,如果是就更新key和插入/更新到sorted set,然后定期把100名以后的移除掉,這樣就不會占太多內(nèi)存。

2018年2月3日 05:22