Redis在遊戲伺服器中的應用

2022-08-29 06:36:12 字數 1092 閱讀 9832

排行榜

遊戲伺服器中涉及到很多排行資訊,比如玩家等級排名、金錢排名、戰鬥力排名等。

一般情況下僅需要取排名的前n名就可以了,這時可以利用資料庫的排序功能,或者自己維護乙個元素數量有限的top集合。

但是有時候我們需要每乙個玩家的排名,玩家的數量太多,不能利用資料庫(全表排序壓力太大),自己維護也會比較麻煩。

使用redis可以很好的解決這個問題。它提供的有序set,支援每個鍵值(比如玩家id)擁有乙個分數(score),每次往這個set裡新增元素,

redis會對其進行排序,修改某一元素的score後,也會更新排序,在獲取資料時,可以指定排序範圍。

更重要的是,這個排序結果會被儲存起來,不用在伺服器啟動時重新計算。

通過它,排行榜的實時重新整理、全服排行都不再成為麻煩事。

訊息佇列(可跨服

redis提供的list資料型別,可以用來實現乙個訊息佇列。

由於它是獨立於遊戲伺服器的,所以多個遊戲伺服器可以通過它來交換資料、傳送事件。

redis還提供了發布、訂閱的事件模型。

利用這些,我們就不必自己去實現一套伺服器間的通訊框架,方便地實現伺服器組。

資料庫快取

redis提供了較為豐富資料型別,使我們可以更為容易地將資料物件快取起來(序列化、protobuffer)。

當需要請求某一資料時,先從redis中查詢,如果沒有再查資料庫,同時交給redis快取起來。

當對資料進行修改時,則先將修改後的資料儲存到redis,然後儲存至資料庫(2)。

第2步可以有另外的思路:

a不實時儲存到資料庫,而是交由另外的執行緒(甚至是專門的程式)去儲存,以提高邏輯層的響應速度。

b部分資料交給redis儲存(reids自身有持久化功能),像玩家已經完成過的任務id集合,利用redis的set型別儲存更為合適。

c玩家瞬時變化的資料不見得每次修改都需要儲存(比如金錢、經驗),但如果遊戲伺服器自己維護在記憶體中,出現宕機就會導致回檔。

redis是獨立於遊戲伺服器的,交由它來儲存,可以防止宕機回檔的問題,也可以減少遊戲伺服器自己維護資料所占用的記憶體。

此文來自:

mysql 做遊戲伺服器配置 遊戲伺服器部署

bin bash 小菜鳥 掛機 版本 1.0 遊戲伺服器部署 基礎環境 mysql資料庫svn客戶端需部署才能執行此指令碼 if uid 0 then echo game server install else exit 1 firead p please create the storage ga...

mysql遊戲伺服器快取 遊戲伺服器快取策略

1 什麼是快取 在資料庫與伺服器邏輯之間加入的資料層 2 作用 減少資料庫操作 伺服器使用mysql作為資料庫,mysql每秒鐘併發數量有限,所以我們要減少mysql的操作。3 erlang的快取 erlang 在記憶體中可用 程序字典 gen state ets 儲存變數,理論上三種方式都可以作為...

遊戲伺服器架構

登陸伺服器判斷賬戶合法性,如果合法的話,把session資訊寫入memcache,閘道器伺服器收到玩家連線請求後,在memcache裡查詢是否合法玩家,防止非法連線。閘道器伺服器要管理玩家連線,需要高併發,可以開多個 scene mgr純粹的 訊息功能 資料庫伺服器純粹的查詢修改資料功能,如果成為瓶...