国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Redis數(shù)據(jù)庫在網(wǎng)游服務(wù)器開發(fā)中的應(yīng)用

2014-04-29 08:16紀(jì)國賢
電腦迷 2014年21期
關(guān)鍵詞:網(wǎng)絡(luò)游戲

紀(jì)國賢

摘 要 Redis 是一個開源的內(nèi)存數(shù)據(jù)庫,具有速度快,類型全,支持多種語言操作,可以把內(nèi)存中的數(shù)據(jù)同步存儲到硬盤上保存等優(yōu)點,被廣泛應(yīng)用于網(wǎng)站大數(shù)據(jù)搜索,游戲服務(wù)器等領(lǐng)域。

關(guān)鍵詞 Redis 網(wǎng)絡(luò)游戲 Key-Value

中圖分類號:TP3 文獻標(biāo)識碼:A

Redis是一個開源的,先進的key-value持久化產(chǎn)品。它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,它的值可以是字符串(String)、哈希(Map)、列表(List)、集合(Sets)和有序集合(Sorted sets)等類型??梢栽谶@些類型上面做一些原子操作,如:字符串追加、增加Hash里面的值、添加元素到列表、計算集合的交集,并集和差集;或者區(qū)有序集合中排名最高的成員。為了取得好的性能,Redis是一個內(nèi)存型數(shù)據(jù)庫。不限于此,看你怎么用了,也可以把數(shù)據(jù)保存到磁盤中,或者把數(shù)據(jù)操作指令追加了一個日志文件,把它用于持久化。也可以用Redis容易的搭建master-slave架構(gòu)用于數(shù)據(jù)復(fù)制。Redis可以用大部分程序語言來操作:C、C++、C#、Java、Node.js、php、ruby等等。

Redis主要用于解決傳統(tǒng)關(guān)系型數(shù)據(jù)庫存儲和查詢等操作速度緩慢的問題,比如Mysql,Mssql。傳統(tǒng)網(wǎng)絡(luò)游戲中要把關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)加載到內(nèi)存中運算才能滿足游戲?qū)?shù)據(jù)的處理速度的需求。而從內(nèi)存到數(shù)據(jù)庫保存數(shù)據(jù)是每隔一段時間保存的,如果服務(wù)器出現(xiàn)bug,那么內(nèi)存里面的數(shù)據(jù)將會全部丟失。這就意味著玩家會丟失游戲數(shù)據(jù),比如丟了裝備,丟了進度,只能被迫回檔,這顯然對游戲的運營造成了很大的困擾。因為Redis數(shù)據(jù)庫是運行在內(nèi)存中的,相對于基于磁盤存儲的傳統(tǒng)數(shù)據(jù)庫,速度快了許多倍,游戲可以同步的把數(shù)據(jù)保存在redis數(shù)據(jù)庫里面,這樣即使服務(wù)器程序突然關(guān)閉也不會丟失用戶數(shù)據(jù)。

市場上還有Mongodb,Memcached等key-value型內(nèi)存數(shù)據(jù)庫提供了和Redis類似的功能。Mongodb是非關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)保存在磁盤上并且提供比較高的性能。Memcached是配合Mysql這種傳統(tǒng)數(shù)據(jù)庫的非關(guān)系型內(nèi)存數(shù)據(jù)庫,也可以看成是一個數(shù)據(jù)緩存,但是他不提供數(shù)據(jù)持久化的功能,只能通過其他傳統(tǒng)數(shù)據(jù)庫保存數(shù)據(jù)。Redis數(shù)據(jù)庫比他們優(yōu)秀一個方面是他既是內(nèi)存數(shù)據(jù)庫,又可以把數(shù)據(jù)保存到硬盤上。Redis有兩種硬盤存儲模式支持(snapshot和aof),另外Redis可以將key-value中的部分調(diào)用較少的value存儲在硬盤中,即VM(虛擬內(nèi)存)。Redis顯然比較適合于游戲中的應(yīng)用。

游戲服務(wù)器中涉及到很多排行信息,比如玩家等級排名、金錢排名、戰(zhàn)斗力排名等。一般情況下僅需要取排名的前N名就可以了,這時可以利用數(shù)據(jù)庫的排序功能,或者自己維護一個元素數(shù)量有限的top集合。但是有時候我們需要每一個玩家的排名,玩家的數(shù)量太多,不能利用數(shù)據(jù)庫(全表排序壓力太大),自己維護也會比較麻煩。使用Redis可以很好的解決這個問題。它提供的有序Set,支持每個鍵值(比如玩家id)擁有一個分?jǐn)?shù)(score),每次往這個set里添加元素,Redis會對其進行排序,修改某一元素的score后,也會更新排序,在獲取數(shù)據(jù)時,可以指定排序范圍。更重要的是,這個排序結(jié)果會被保存起來,不用在服務(wù)器啟動時重新計算。通過它,排行榜的實時刷新、全服排行都不再成為麻煩事。

Redis提供了較為豐富數(shù)據(jù)類型,使我們可以更為容易地將數(shù)據(jù)對象緩存起來(序列化、protobuffer)。當(dāng)需要請求某一數(shù)據(jù)時,先從Redis中查找,如果沒有再查數(shù)據(jù)庫,同時交給Redis緩存起來。當(dāng)對數(shù)據(jù)進行修改時,則先將修改后的數(shù)據(jù)保存到Redis,然后保存至數(shù)據(jù)庫??梢杂辛硗獾乃悸罚篈不實時保存到數(shù)據(jù)庫,而是交由另外的線程(甚至是專門的程序)去保存,以提高邏輯層的響應(yīng)速度。B部分?jǐn)?shù)據(jù)交給Redis保存(Reids自身有持久化功能),像玩家已經(jīng)完成過的任務(wù)ID集合,利用Redis的Set類型保存更為合適。C玩家瞬時變化的數(shù)據(jù)不見得每次修改都需要保存(比如金錢、經(jīng)驗),但如果游戲服務(wù)器自己維護在內(nèi)存中,出現(xiàn)宕機就會導(dǎo)致回檔。Redis是獨立于游戲服務(wù)器的,交由它來保存,可以防止宕機回檔的問題,也可以減少游戲服務(wù)器自己維護數(shù)據(jù)所占用的內(nèi)存。

為了更好的擴展數(shù)據(jù)庫,把Redis設(shè)置成集群模式是相當(dāng)簡單的事情:在Slave啟動并連接到Master之后,它將主動發(fā)送一個SYNC命令。此后Master將啟動后臺存盤進程,同時收集所有接收到的用于修改數(shù)據(jù)集的命令,在后臺進程執(zhí)行完畢后,Master將傳送整個數(shù)據(jù)庫文件到Slave,以完成一次完全同步。而Slave服務(wù)器在接收到數(shù)據(jù)庫文件數(shù)據(jù)之后將其存盤并加載到內(nèi)存中。此后,Master繼續(xù)將所有已經(jīng)收集到的修改命令,和新的修改命令依次傳送給Slaves,Slave將在本次執(zhí)行這些數(shù)據(jù)修改命令,從而達到最終的數(shù)據(jù)同步。如果Master和Slave之間的鏈接出現(xiàn)斷連現(xiàn)象,Slave可以自動重連Master,但是在連接成功之后,一次完全同步將被自動執(zhí)行。

Redis數(shù)據(jù)庫優(yōu)異的性能和完善的數(shù)據(jù)處理方式,非常適合在網(wǎng)絡(luò)游戲服務(wù)器中使用,高速,穩(wěn)定,支持多種類型是它最大的優(yōu)點。

猜你喜歡
網(wǎng)絡(luò)游戲
網(wǎng)絡(luò)游戲的虛擬財產(chǎn)的法律性質(zhì)及其刑法保護
停止侵害在網(wǎng)絡(luò)游戲侵權(quán)案件中的適用
大學(xué)生網(wǎng)絡(luò)游戲行為及其影響調(diào)查分析
網(wǎng)絡(luò)游戲的品牌推廣策略研究
冰川網(wǎng)絡(luò)股份有限公司財務(wù)報表綜合案列分析
修改游戲賬戶網(wǎng)絡(luò)游戲銀兩的行為應(yīng)如何定性
青少年網(wǎng)絡(luò)模仿性暴力犯罪特點、成因及預(yù)防對策
網(wǎng)絡(luò)游戲?qū)Ξ?dāng)代大學(xué)生造成的危害研究
淺析網(wǎng)絡(luò)對青少年成長的影響
我國網(wǎng)絡(luò)游戲產(chǎn)業(yè)SCP范式分析