安利一波Redis To遊戲後天開發的小夥伴

2021-09-28 22:08:56 字數 2029 閱讀 1080

一、常見的遊戲使用資料庫方式

1、mysql或mongo等關聯式資料庫落地,redis作為快取、排行榜、訊息佇列使用

好處:
架構比較傳統,程式設計師接受度較高。mysql等資料庫較成熟,元件豐富,資料庫運維方便。

缺點:程序擴容、更新、down機重啟需要去冷資料庫中重新拉取資料,或者做資料轉移,容易產生效能瓶頸。

如果對資料做快取則會有多份資料同時存在,容易導致資料不一致問題。還有快取穿透現象。

特別是全區全服遊戲,資料庫壓力較大。
2、共享記憶體快取資料,再加上1中的資料儲存方式

利用共享記憶體快取資料,程序更新、重啟直接從共享記憶體中載入資料。

好處:缺點:

資料儲存多份、需要自己寫擴容邏輯、資料路由也比較麻煩。

3、資料儲存完全使用redis

好處:

效能高,不需要關心擴縮容,資料路由問題。

合理使用,資料庫這方面完全可以抗住大平台導流量的壓力。

解放程式設計師心智,可以花更多精力在玩法、場景等遊戲核心體驗上。

缺點:
全記憶體儲存,成本較高。

全redis方案在網際網路行業不流行,程式設計師接受度較低,或者直接沒考慮過這種用法。

無法自定義資料結構。

二、redis能為遊戲帶來哪些好處

遊戲中的玩家資料其讀寫都是有明顯的約束的—玩家id。redis這種資料庫和遊戲可以說是天作之和,非常適合用來儲存遊戲資料。

1、高效能、高可靠性

單redis例項每秒可以達到10萬+qps,近似本地記憶體的效能。

據了解還沒有因為redis本身的bug造成過遊戲down機,或者redis自身down機情況。

2、資料結構、介面豐富、不需要提前配置資料結構

zlist:排行榜

hash:

set:

除了需要強關係查詢的功能,基本都可以找到實現方案。

最後還有萬金油lua,涉及到事務,自定義操作都可以通過lua實現。

3、託管絕大部分資料,取代掉遊戲中大部分的狀態資料

基於redis的高效能與豐富的資料結構,可以將遊戲絕大部分資料放入redis中,程序中只快取變化特頻繁丟失對系統無影響的資料(如對戰中的玩家位置,某次戰鬥中的hp等),系統可以做到隨時重啟、更新、擴容。方便運維、減少各種原因導致的停機對遊戲體驗的的影響。

三、redis目前存在的問題

1、擴容困難

官方集群方案對客戶端不透明。

2、落地方式比較粗糙

rdb全量落地、利用系統cow特性,fork子程序進行落地。需要兩倍的記憶體容量。

aof實時落地

3、資料無法回滾到任意時間點

rdb落地間隔較長,aof格式中沒有時間戳。回滾只能回滾到大概的時間節點,不能保證強一致性。

4、資料全存記憶體中

成本較高,機器有問題則資料丟失,利用rdb與aof載入資料需要時間較長。

5、單執行緒

單執行緒避免了執行緒切換和競態產生的消耗。但是對於每個命令的執行時間有要求。如果某個命令執行時間過長會造成其它命令的阻塞。

我們需要的redis:

四、自動化運維、平滑擴容、高可用

1、自動申請、部署redis系統

2、通過**實現集群功能、**和後端的redis都可以平滑擴容

3、**遮蔽後端redis例項的主從切換

4、日誌功能的二次開發,必要的情況下可以回滾到任意時間點

五、全面的監控預警系統

1、zset,list元素個數,熱key,大key,慢查詢

有的時候開發會將大量資料儲存在乙個key中,造成key的資料量太大,容易造成系統阻塞。

通過監控熱key可以找出系統單點瓶頸。比如乙個全區排行榜操作太頻繁造成系統卡頓。可以實時告警,為開發優化系統提供建議。

大key和慢查詢是各種資料中基本的監控項。

六、冷熱自動分離

1、冷資料淘汰出記憶體,存入硬碟

2、自動備份、擴容

3、方便好用的日誌,資料匯出等周邊工具

安利一波TabNine

外網上看到tabnine的推薦,安裝試了一下,剛開始覺得幫助不大,乙個上午的使用之後就發現真的太ai了,我tornado習慣手寫sql語句,tabnine能夠幫助我直接補全模板。當然好處不止這些,使用的越久,他的深度學習演算法越能夠掌握你的 風格,自動幫你補全 我使用的intellij系的ide,此...

C語言安利一波函式封裝

最近學弟學妹們在寫聊天室,期間遇到了很多問題,也 逼迫 我們這些大二 其實即將大三 狗考慮了許多以前沒有考慮過的東西。現在就著我們小組的聊天室的專案,送給學弟學妹們 幾個可能安全的封裝函式。ssize t sendlen int fd,const void buf,size t len,int fl...

vector理解一波

vector 標頭檔案 include using namespacestd 定義 vector 型別 q 類同於 型別 q vector 型別 q 1010 類同於 型別 q 1010 操作 往vector存入乙個個資料 函式名 w.push back 資料 include include usi...