每當(dāng)Viacom上傳一個(gè)視頻片段,系統(tǒng)將建立一個(gè)私有的對(duì)象,并于1個(gè)超類(lèi)關(guān)聯(lián)。每一次修改,他們都需要重估私有對(duì)象的每個(gè)改變,并更新 所有復(fù)合對(duì)象。同時(shí),系統(tǒng)還需要無(wú)效Akamail中的URL請(qǐng)求。系統(tǒng)現(xiàn)有架構(gòu)的組合及更敏捷的管理方法需求將Viacom推向了Redis。
基于Viacom主要基于PHP,所以這個(gè)解決方案必須支持PHP。他們首先選擇了memcached做對(duì)象存儲(chǔ),但是它并不能很好的支持 hashmap;同時(shí)他們還需要一個(gè)更有效的進(jìn)行無(wú)效步驟的重估,即更好的理解內(nèi)容的依賴性。本質(zhì)上說(shuō),他們需要時(shí)刻跟進(jìn)無(wú)效步驟中的依賴性改變。因此他 們選擇了Redis及Predis的組合來(lái)解決這個(gè)問(wèn)題。
他們團(tuán)隊(duì)使用Redis給southparkstudios.com和thedailyshow.com兩個(gè)網(wǎng)站建設(shè)依賴性圖,在取得了很大的成功后他們開(kāi)始著眼Redis其它適合場(chǎng)景。
Redis的其它使用場(chǎng)景
顯而易見(jiàn),如果有人使用Redis來(lái)建設(shè)依賴性圖,那么使用它來(lái)做對(duì)象處理也是說(shuō)得通的。同樣,這也成了架構(gòu)團(tuán)隊(duì)為Redis選擇的第二使 用場(chǎng)景。Redis的復(fù)制及持久化特性同時(shí)也征服了Viacom的運(yùn)營(yíng)團(tuán)隊(duì),因此在幾個(gè)開(kāi)發(fā)周期后,Redis成為他們網(wǎng)站的主要數(shù)據(jù)及依賴性儲(chǔ)存。
后兩個(gè)用例則是行為追蹤及瀏覽計(jì)數(shù)的緩沖,改變后的架構(gòu)是Redis每幾分鐘向MySQL中儲(chǔ)存一次,而瀏覽計(jì)數(shù)則通過(guò)Redis進(jìn)行存儲(chǔ) 及計(jì)數(shù)。同時(shí)Redis還被用來(lái)做人氣的計(jì)算,一個(gè)基于訪問(wèn)數(shù)及訪問(wèn)時(shí)間的得分系統(tǒng)——如果某個(gè)視頻最近被訪問(wèn)的次數(shù)越多,它的人氣就越高。在如此多內(nèi)容 上每隔10-15分鐘做一次計(jì)算絕對(duì)不是類(lèi)似MySQL這樣傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的強(qiáng)項(xiàng),Viacom使用Redis的理由也非常簡(jiǎn)單——在1個(gè)存儲(chǔ)瀏覽信息 的Redis實(shí)例上運(yùn)行Lua批處理作業(yè),計(jì)算出所有的得分表。信息被拷貝到另一個(gè)Redis實(shí)例上,用以支持相關(guān)的產(chǎn)品查詢。同時(shí)還在MySQL上做了 另一個(gè)備份,用以以后的分析,這種組合會(huì)將這個(gè)過(guò)程耗費(fèi)的時(shí)間降低60倍。
Viacom還使用Redis存儲(chǔ)一步作業(yè)信息,這些信息被插入一個(gè)列表中,工作人員則使用BLPOP命令行在隊(duì)列中抓取頂端的任務(wù)。同時(shí)zsets被用于從眾多社交網(wǎng)絡(luò)(比如Twitter及Tumblr)上綜合內(nèi)容,Viacom通過(guò)Brightcove視頻播放器來(lái)同步多個(gè)內(nèi)容管理系統(tǒng)。
橫跨這些用例,幾乎所有的Redis命令都被使用——sets、lists、zlists、hashmaps、scripts、counters等。同時(shí),Redis也成為Viacom可擴(kuò)展架構(gòu)中不可或缺的一環(huán)。