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