1.心路歷程

      上年11月份來(lái)公司了,和另外一個(gè)同事一起,做了公司一個(gè)移動(dòng)項(xiàng)目的微信公眾號(hào),然后為了推廣微信公眾號(hào),策劃那邊需要我們做一些活動(dòng),包括抽獎(jiǎng),投票。最開(kāi)始是沒(méi)有用過(guò)redis的,公司因?yàn)榭紤]到參與人數(shù)的問(wèn)題,給我們配了兩臺(tái)redis服務(wù)器,一臺(tái)windows的(負(fù)責(zé)本地測(cè)試),一臺(tái)linux的(負(fù)責(zé)線上版本),接下來(lái)說(shuō)說(shuō)途中遇到的坑,和最后的解決方法

2.坑之一,存List的瓶頸問(wèn)題

      linux版本redis服務(wù)器是16G的內(nèi)存,因?yàn)榈谝淮问褂胷edis,并不知道去做壓力測(cè)試,不知道瓶頸在哪,然后redis又被網(wǎng)上的人過(guò)度神話,以為只要內(nèi)存不用完,就不會(huì)有瓶頸,取數(shù)據(jù)都是秒取,存數(shù)據(jù)都是秒存。上線兩天,投票明細(xì)的key里的list集合超過(guò)10W(LIST里面存了投票時(shí)間,投票對(duì)象ID,主鍵ID,投票人ID),讀取速度出現(xiàn)斷崖式的跌落,從毫秒級(jí)變成3秒左右,數(shù)據(jù)量達(dá)到15W后,5秒左右。然后客服就來(lái)電話了,說(shuō)用戶說(shuō)投票太慢了,點(diǎn)一下好久才提示成功,一直轉(zhuǎn)。(他么的,我也是第一次,鬼知道redis會(huì)這樣),我試著取了下另外一個(gè)key的數(shù)據(jù)(5W左右),發(fā)現(xiàn)還是毫秒級(jí),證明key之間沒(méi)有影響,所以當(dāng)時(shí)的想到的解決方案就是,老子分key,差不多就是name_1,name_2,然后另外放個(gè)key存當(dāng)前key的增量,到5W數(shù)據(jù)就分key,臨時(shí)解決投票慢的問(wèn)題。

     總結(jié)一下,應(yīng)該不是條數(shù)的問(wèn)題,和List的長(zhǎng)度有關(guān),所以,不要把redis當(dāng)關(guān)系型數(shù)據(jù)庫(kù)使用,能分key就分key,然后做好瓶頸測(cè)試(現(xiàn)在必做的事之一)。

3.坑之二,redis的update功能

      有沒(méi)有大佬告訴我下,redis能不能Update..不是先取后改再刪最后增加的那種。??梢灾苯佑玫哪欠N。。。可能是我找的幫助類有問(wèn)題,反正一直沒(méi)找到可以直接update的方法。

      因?yàn)檫@個(gè)問(wèn)題,和redis本身不能建索引的問(wèn)題,公司決定弄一臺(tái)mongodb的服務(wù)器(16G)。

      接下來(lái)說(shuō)的是公司的另外一個(gè)需求,就是app要集成im功能,就是QQ聊天的那種,這就存在一個(gè)問(wèn)題了,推送問(wèn)題,這個(gè)太復(fù)雜,所以我們決定用第三方,我就不說(shuō)名字了,免得有打廣告的嫌疑。但是,另外一個(gè)問(wèn)題出現(xiàn)了,好多功能他都收費(fèi),而且還不便宜,按我們的需求來(lái)開(kāi)通收費(fèi)業(yè)務(wù),最低估計(jì)要每月花3000+,老大一拍板,說(shuō),就用它的推送功能和消息的發(fā)送功能,其他不用,這2個(gè)功能是免費(fèi)的。(我的心情是何等的臥槽),因?yàn)楣井a(chǎn)品是3端在跑(內(nèi)部PC端,內(nèi)部移動(dòng)端,客戶移動(dòng)端),IM功能我負(fù)責(zé)提供接口給移動(dòng)端,還有PCWEB端的聊天功能,所以考慮到用什么,Mongo弄進(jìn)來(lái)用了一段時(shí)間(另外的同事弄了轉(zhuǎn)盤抽獎(jiǎng)活動(dòng),就是用的mongo),用redis肯定是不行的,因?yàn)橐媪奶煊涗洠▼尩模銈冏约赫f(shuō)QQ是不是很不安全,啥都存著),存好友關(guān)系,存身份信息,所以不能直接用redis來(lái)搞,決定用Mongo,因?yàn)镸ongo支持索引,問(wèn)題來(lái)了,mongo如果用string類型做索引,效率也是不高的,不用的話,關(guān)系怎么辦(各大用戶表的主鍵都是guid),最后想到的解決方案是,用mongo的objectid做索引,redis用hash存objectid和主鍵Guid之間的對(duì)應(yīng)關(guān)系

網(wǎng)友評(píng)論