排行榜資料結構實現

2021-06-09 20:57:35 字數 923 閱讀 1195

需求情景】:遊戲玩家互相打鬥,更新玩家名次,遊戲榜保留前1000名的,1000以外的可以打1000以內的玩家

打鬥規則】:每場打鬥雙方名次交換,其它玩家名次不變化

實現要求】:1.在排行頁面全部展示所有玩家的名次(排行頁面全部玩家都能看到 ) 2.每個玩家登入遊戲後,在打鬥頁面看到自己當前的名次(自己看自己的)

我的實現】:

hashmap此map 用於實現需求 2 ,string為玩家登入時的playerid,從map裡面通過playerid這個key拿到playerobj,展示出當前這個玩家的名次

arraylist此list  用於實現需求 1, list對應的位置就是玩家的名次

playerobj定義如下:

class playerobj

map  list  持有的是同乙個playerobj物件的引用,啟動伺服器時,載入到記憶體裡面時,同時將引用放個這兩個容器

實際情況】:

a ,b 玩家打鬥,會首先更新對應的兩個playerobj,同時更新db(放入db執行緒,批量更新)

情景1,(1000名以外打榜內的玩家,勝利方要加入進來,失敗方要移除出排行榜)

移除失敗方key-value,新增勝利方key-value;更新list裡面失敗方位置為勝利的玩家

情景2,榜內玩家互打

map裡面的key-value不用更新,持有物件的引用;交換list裡面兩個物件的位置;

自己感覺這樣實現,複雜了些,有沒有更好的實現呢?懇請各位不吝賜教,提出寶貴的意見和建議

mysql製作排行榜 mysql實現排行榜

博主新人一枚,大家可以提出自己的寶貴意見。下來我們進入正題。大家首先要了解介面的場景,再就是排行榜的規則,我們這裡說的中國式排行榜。排行榜總結了一下分為3種 中國式排行 非中國式排行1 非中國式排行2 1 1 1 2 2 2 2 2 3 3 4 4 3 5 5 4 5 6 5 7 7 select ...

redis實現排行榜

排行榜功能是乙個很普遍的需求。設想在乙個遊戲中,有上百萬的玩家資料,如果現在需要你根據玩家的經驗值整理乙個前20名的排行榜,你會怎麼做呢?你不可能 order by limit 去實現 select from game socre order by score desc limit 0,20 使用 ...

Redis 實現排行榜

不再介紹資料庫做實時排行榜的弊端,直接介紹redis的有序集合的強大作用。有序集合的資料和集合一樣,不能重複,但每個元素又可以關聯乙個分數,這個分數可以重複。需要注意的是,redis版本和命令變化較大,注意執行環境。執行環境 redis 庫版本 3.3.11 redis版本 3.2.1 生成資料 i...