設(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é)果: