《Redis實戰(zhàn)之Sort Set》要點:
本文介紹了Redis實戰(zhàn)之Sort Set,希望對您有用。如果有疑問,可以聯(lián)系我們。
游戲服務(wù)器需要做一個排行榜實時更新,如果沿用傳統(tǒng)的方法,一般是通過后端的定時任務(wù)去跑數(shù)據(jù)來生成排行榜數(shù)據(jù),這種方法一方面無法滿足產(chǎn)品對功能實時性的要求,另一方面也一定程度上消耗服務(wù)器端有限的資源.如果從每次數(shù)據(jù)庫讀取數(shù)據(jù)并進行排名(使用Mysql的sort關(guān)鍵字進行排序),在關(guān)卡數(shù)據(jù)量的級數(shù)大時是一種效率低的方法.在查閱大量資料后,發(fā)現(xiàn)了Redis中的有序集合(Sort Set).
Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重復的成員.不同的是每個元素都會關(guān)聯(lián)一個double類型的分數(shù).redis正是通過分數(shù)來為集合中的成員進行從小到大的排序.有序集合的成員是唯一的,但分數(shù)(score)卻可以重復.集合是通過哈希表實現(xiàn)的,所以添加,刪除,查找的復雜度都是O(1). 集合中最大的成員數(shù)為 2^32 - 1.
應(yīng)用場景
Redis有序集合非常適用于有序不重復數(shù)據(jù)的存儲,例如游戲開發(fā)中無處不在的排行榜,如等級排行榜,經(jīng)驗排行榜,積分排行榜,歷史籌碼排行榜等.
相關(guān)命令
本文只給出部分常用的命令,所有的命令可參考http://www.runoob.com/redis/redis-sorted-sets.html.
ZADD key score1 member1 [score2 member2] 向有序集合添加一個或多個成員,或者更新已存在成員的分數(shù)
ZCARD key 獲取有序集合的成員數(shù)
ZRANGE key start stop [WITHSCORES] 通過索引區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員
ZRANK key member 返回有序集合中指定成員的索引
ZREM key member [member ...] 移除有序集合中的一個或多個成員
ZREVRANK key member 返回有序集合中指定成員的排名,有序集成員按分數(shù)值遞減(從大到小)排序
使用場景
輸入5個用戶的積分(uid, score), 實現(xiàn)top-3的查詢, 某個用戶更新積分, 再次查詢top-3.
添加積分:添加 (player0001, 1800), (player0002, 1987), (player0003, 965), (player0004, 4382), (player0005, 0), 并假定rank 為sorted set的name.
查詢5人的積分排行榜;
更新player005的積分;
重新查詢5人的積分排行榜;
排行榜思想:玩家每次積分發(fā)生變動時,更改Redis中相應(yīng)玩家的積分.當客戶端向服務(wù)器哀求調(diào)用GetRank時,php服務(wù)器調(diào)用zrangeRank函數(shù),返回相應(yīng)的數(shù)據(jù).
《Redis實戰(zhàn)之Sort Set》是否對您有啟發(fā),歡迎查看更多與《Redis實戰(zhàn)之Sort Set》相關(guān)教程,學精學透。維易PHP學院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/10687.html