redis實戰(zhàn)之使用redis實現(xiàn)排行榜(轉(zhuǎn))

設(shè)想在一個游戲中,有上百萬的玩家數(shù)據(jù),如果現(xiàn)在需要你根據(jù)玩家的經(jīng)驗值整理一個前20名的排行榜,你會怎么做呢?

一般的做法是寫一條類似下面這條sql語句的方式來獲取:


這種方式在數(shù)據(jù)量較小的情況下可行,但是在數(shù)據(jù)量大的情況下查詢速度將變慢,特別是還需要聯(lián)表查詢時,速度下降的就更明顯了。

這時你可以考慮使用redis來實現(xiàn)這個功能。

實現(xiàn)這個功能主要用到的redis數(shù)據(jù)類型是redis的有序集合zset。zset 是set 類型的一個擴展,比原有的類型多了一個順序?qū)傩?此屬性在每次插入數(shù)據(jù)時會自動調(diào)整順序值,保證value值按照一定順序連續(xù)排列。

主要的實現(xiàn)思路是:

1、在一個新的玩家參與到游戲中時,在redis中的zset中新增一條記錄(記錄內(nèi)容看具體的需求)score為0

2、當玩家的經(jīng)驗值發(fā)生變化時,修改該玩家的score值

3、使用redis的ZREVRANGE方法獲取排行榜

實現(xiàn)代碼:

functions.php

iredis.php

index.php

執(zhí)行結(jié)果:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容