遊戲伺服器使用MongoDB作為資料庫,還有必要使用Redis緩存嗎?

MongoDB本身就是內存資料庫,在他和程序之間再加一道Redis緩存,是不是有點重複了?有沒有好處?


看你做多大規模,比如,熱數據(比如1天內頻繁訪問的)放 redis,冷數據(超過一天的)放 mongo。


沒必要吧。按我的經驗來看,一般遊戲伺服器往往會內置一個簡單的緩存來保存熱數據,沒必要再加一個redis。當然,如果你們是php開發的,那就當我沒說。


把MongoDB當成MySQL, 把Redis當成內存

跨服數據交換用Redis. 數據持久化用MongoDB

Redis持久化別沾, 系統的未必適合遊戲, 而自己做未必靠譜. 用專業的持久化DB才是正道


題主需要儲存的數據有哪些?不同的數據,對於存取效率的需求是否相同?是否存在需要反覆修改的數據?是否有些數據量特別大,有些數據比較小?是否有數據需要分開處理?

從我的經驗來講,我做的爬蟲,一般是把url放在redis裡面,而爬取到的數據放在MongoDB裡面。這樣做的好處是,對於MongoDB,只用來保存數據。爬到的數據存到裡面就不管了。而對於Redis,它更像是一個隊列,有源源不斷的URL進去,有源源不斷的URL出來,並且URL用過一次以後就就不需要了,再隨著爬取到的數據一起存入MongoDB裡面。

我沒有做過遊戲伺服器,對你的需求不清楚。但是我覺得,裡面肯定有些數據對存取效率的需求會比其他的高吧,這個時候,把他們放在redis裡面,其他的放在MongoDB裡面。


MongoDB不是內存型資料庫,他只不過把所有文件索引存到內存里而已。同樣的機型,用MongoDB會比Redis存更多,但Redis響應更快。關鍵的是看量有多大。


謝邀(並沒有)。

首先,需要糾正一下,mongodb並非內存資料庫,是document資料庫。

其次,感謝你對mongodb的使用與信任,在國內推廣mongo的我表示眼淚汪汪。

下面進入正文,有沒有必要?答案是可以有!

來一一分析,

1.作為遊戲後端資料庫,除卻主資料庫不談,我們儘可能要避免local cache的使用,這對水平擴展,高HA是不友好的,甚至你會是一個有狀態的架構orz,那麼,這個redis就能承擔common cache的功能,如socket,等等都可以丟裡面,個人建議是不落地,不然失去了其高性能的優勢,所以放什麼數據進去,需要好好設計。

2.mongo作為遊戲後端主資料庫我個人認為有很大的優勢,因為其能大幅度縮短開發周期(不用細說,大家應該可以理解)。以及其原生的高可用結構,還有sharding擴展(如果有必要)。

3.如果遊戲策劃準備出一個類似秒殺的活動,那麼客戶端能對瞬間高並發進行過濾,如果出一個類似聚划算量級的密集高並發活動呢,這時候,也許你的ssd +mongo3.0以上版本都不一定hold得住,這時候redis可以作為緩存層幫你達到需要的ops。

4.當然,這也不是必須的,需要根據你的遊戲情節,業務情況考量。

Ps:我們就有用mongo做手游,規模不小。


用 id 取數據的時間複雜度,mongodb 加了索引是 O(log n),redis 是 O(1),你自己看著辦吧。


沒必要,這兩個都是kv型資料庫。

如果是要純內存緩存的,建議用memcached效率更高。


這個主要還是看遊戲的運營計劃,如果是打算滾服的,那其實單服一般活躍用戶最多也就一兩千的量級(七日留存還有三五百的都算能活下來的了),單台物理機輕鬆搞定(甚至一台物理機開好幾個區),那直接遊戲服內做個簡單的緩存系統,資料庫mysql或者別的啥都可以,因為單服確實沒多大數據量,還可以考慮定期將流失了的玩家數據序列化在磁碟上,萬一哪天他回歸了通過「找回老帳號」功能再反序列化出來寫到庫里就是了。但如果目標是搞個上萬甚至數萬人同時同服在線的話,那就得考慮做分散式的遊戲服了。做個接入伺服器來給遊戲服集群做負載均衡,緩存系統上redis(或集群),單純的作為緩存,不持久化。資料庫嘛其實我覺得mysql或mongodb都可以,目前我用的mysql是可以搞定的。


用啥資料庫啊,直接放verticle裡面,速度比用redis快兩個數量級

你想用persistence的話,做一個非同步的io就是了


個人覺得有大量公共數據需要從資料庫頻繁讀取的話,還是加一個redis或者mencache比較好點


MongoDB是nosql資料庫,它支持把一部分熱數據放到內存中,方便用戶更快的去處理它。

Redis是內存型資料庫,是完全的內存資料庫!所有的數據都在內存,不存在硬碟一部分,內存一部分的情況。當然可以用save去存數據到硬碟,但這是為了備份安全性考慮而不是使用。


Design case, and do performance test comparation


兩樣都用的話,mong可以用來當資料庫(非內存)redis用來當緩存系統!


說白了還是你的應用太小了。

另,MongoDB不是內存資料庫,和mysql的NDB存儲引擎一樣,只是把索引文件放到內存中。


操作的數據用途不一樣 Redis可做緩存 比如玩家數據 可以序列化進去 讀取再反序列化 到程序,這樣避免載入熱點玩家數據讀取資料庫;monogdb嘛 現在項目也在用,但沒覺得比mysql有什麼好,別問我為什麼要用,因為這是遺留問題。


推薦閱讀:

作為遊戲客戶端開發,需要掌握哪些伺服器方面的知識,以及如何學習?
手游開發中網路通信使用長連接還是短連接比較好?
互聯網中TCP Socket伺服器的實現過程需要考慮哪些安全問題?

TAG:Redis | MongoDB | 遊戲伺服器 | 伺服器架構 |