拼多多面試:如何用Redis統(tǒng)計(jì)獨(dú)立用戶訪問(wèn)量

眾所周至纷宇,拼多多的待遇也是高的可怕,在挖人方面也是不遺余力龙屉,對(duì)于一些工作3年的開(kāi)發(fā)呐粘,稍微優(yōu)秀一點(diǎn)的,都給到30K的Offer转捕,當(dāng)然作岖,拼多多加班也是出名的,一周上6天班是常態(tài)五芝,每天工作時(shí)間基本都是超過(guò)12個(gè)小時(shí)痘儡,也是相當(dāng)辛苦的。

廢話不多說(shuō)枢步,今天我們來(lái)聊一聊拼多多的一道后臺(tái)面試真題沉删,是一道簡(jiǎn)單的架構(gòu)類(lèi)的題目:拼多多有數(shù)億的用戶,那么對(duì)于某個(gè)網(wǎng)頁(yè)醉途,怎么使用Redis來(lái)統(tǒng)計(jì)一個(gè)網(wǎng)站的用戶訪問(wèn)數(shù)呢矾瑰?

01

使用Hash


哈希是Redis的一種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),Redis底層維護(hù)的是一個(gè)開(kāi)散列隘擎,會(huì)把不同的key映射到哈希表上殴穴,如果是遇到關(guān)鍵字沖突,那么就會(huì)拉出一個(gè)鏈表出來(lái)货葬。

當(dāng)一個(gè)用戶訪問(wèn)的時(shí)候采幌,如果用戶登陸過(guò),那么我們就使用用戶的id震桶,如果用戶沒(méi)有登陸過(guò)休傍,那么我們也能夠前端頁(yè)面隨機(jī)生成一個(gè)key用來(lái)標(biāo)識(shí)用戶,當(dāng)用戶訪問(wèn)的時(shí)候蹲姐,我們可以使用HSET命令磨取,key可以選擇URI與對(duì)應(yīng)的日期進(jìn)行拼湊人柿,field可以使用用戶的id或者隨機(jī)標(biāo)識(shí),value可以簡(jiǎn)單設(shè)置為1寝衫。

當(dāng)我們要統(tǒng)計(jì)某一個(gè)網(wǎng)站某一天的訪問(wèn)量的時(shí)候顷扩,就可以直接使用HLEN來(lái)得到最終的結(jié)果了。

優(yōu)點(diǎn):簡(jiǎn)單慰毅,容易實(shí)現(xiàn)隘截,查詢也是非常方便,數(shù)據(jù)準(zhǔn)確性非常高汹胃。

缺點(diǎn):占用內(nèi)存過(guò)大婶芭。隨著key的增多,性能也會(huì)下降着饥。小網(wǎng)站還行犀农,拼多多這種數(shù)億PV的網(wǎng)站肯定受不了使用Bitset

02

使用Bitset

我們知道,對(duì)于一個(gè)32位的int宰掉,如果我們只用來(lái)記錄id呵哨,那么只能夠記錄一個(gè)用戶,但如果我們轉(zhuǎn)成2進(jìn)制轨奄,每位用來(lái)表示一個(gè)用戶孟害,那么我們就能夠一口氣表示32個(gè)用戶,空間節(jié)省了32倍挪拟!

對(duì)于有大量數(shù)據(jù)的場(chǎng)景挨务,如果我們使用bitset,那么玉组,可以節(jié)省非常多的內(nèi)存谎柄。對(duì)于沒(méi)有登陸的用戶,我們也可以使用哈希算法惯雳,把對(duì)應(yīng)的用戶標(biāo)識(shí)哈希成一個(gè)數(shù)字id朝巫。bitset非常的節(jié)省內(nèi)存,假設(shè)有1億個(gè)用戶石景,也只需要100000000/8/1024/1024約等于12兆內(nèi)存劈猿。

Redis已經(jīng)為我們提供了SETBIT的方法,使用起來(lái)非常的方便鸵钝,我們可以看看下面的例子糙臼,我們?cè)趇tem頁(yè)面可以不停地使用SETBIT命令庐镐,設(shè)置用戶已經(jīng)訪問(wèn)了該頁(yè)面恩商,也可以使用GETBIT的方法查詢某個(gè)用戶是否訪問(wèn)。最后我們通過(guò)BITCOUNT可以統(tǒng)計(jì)該網(wǎng)頁(yè)每天的訪問(wèn)數(shù)量必逆。

優(yōu)點(diǎn):占用內(nèi)存更小怠堪,查詢方便揽乱,可以指定查詢某個(gè)用戶,數(shù)據(jù)可能略有瑕疵粟矿,對(duì)于非登陸的用戶凰棉,可能不同的key映射到同一個(gè)id,否則需要維護(hù)一個(gè)非登陸用戶的映射陌粹,有額外的開(kāi)銷(xiāo)撒犀。

缺點(diǎn):如果用戶非常的稀疏,那么占用的內(nèi)存可能比方法一更大掏秩。使用概率算法

對(duì)于拼多多這種多個(gè)頁(yè)面都可能非常多訪問(wèn)量的網(wǎng)站或舞,如果所需要的數(shù)量不用那么準(zhǔn)確,可以使用概率算法蒙幻,事實(shí)上映凳,我們對(duì)一個(gè)網(wǎng)站的UV的統(tǒng)計(jì),1億跟1億零30萬(wàn)其實(shí)是差不多的邮破。在Redis中诈豌,已經(jīng)封裝了HyperLogLog算法,他是一種基數(shù)評(píng)估算法抒和。這種算法的特征矫渔,一般都是數(shù)據(jù)不存具體的值,而是存用來(lái)計(jì)算概率的一些相關(guān)數(shù)據(jù)构诚。



03


使用PFADD


當(dāng)用戶訪問(wèn)網(wǎng)站的時(shí)候蚌斩,我們可以使用PFADD命令,設(shè)置對(duì)應(yīng)的命令范嘱,最后我們只要通過(guò)PFCOUNT就能順利計(jì)算出最終的結(jié)果送膳,因?yàn)檫@個(gè)只是一個(gè)概率算法,所以可能存在0.81%的誤差丑蛤。

優(yōu)點(diǎn):占用內(nèi)存極小叠聋,對(duì)于一個(gè)key,只需要12kb受裹。對(duì)于拼多多這種超多用戶的特別適用碌补。

缺點(diǎn):查詢指定用戶的時(shí)候,可能會(huì)出錯(cuò)棉饶,畢竟存的不是具體的數(shù)據(jù)厦章。總數(shù)也存在一定的誤差照藻。

好了袜啃,上面就是常見(jiàn)的3種適用Redis統(tǒng)計(jì)網(wǎng)站用戶訪問(wèn)數(shù)的方法了。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末幸缕,一起剝皮案震驚了整個(gè)濱河市群发,隨后出現(xiàn)的幾起案子晰韵,更是在濱河造成了極大的恐慌,老刑警劉巖熟妓,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雪猪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡起愈,警方通過(guò)查閱死者的電腦和手機(jī)只恨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抬虽,“玉大人坤次,你說(shuō)我怎么就攤上這事〕飧常” “怎么了缰猴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)疤剑。 經(jīng)常有香客問(wèn)我滑绒,道長(zhǎng),這世上最難降的妖魔是什么隘膘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任疑故,我火速辦了婚禮,結(jié)果婚禮上弯菊,老公的妹妹穿的比我還像新娘纵势。我一直安慰自己,他們只是感情好管钳,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布钦铁。 她就那樣靜靜地躺著,像睡著了一般才漆。 火紅的嫁衣襯著肌膚如雪牛曹。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,821評(píng)論 1 314
  • 那天醇滥,我揣著相機(jī)與錄音黎比,去河邊找鬼。 笑死鸳玩,一個(gè)胖子當(dāng)著我的面吹牛阅虫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播不跟,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼颓帝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起躲履,我...
    開(kāi)封第一講書(shū)人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎聊闯,沒(méi)想到半個(gè)月后工猜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菱蔬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年篷帅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拴泌。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魏身,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚪腐,到底是詐尸還是另有隱情箭昵,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布回季,位于F島的核電站家制,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏泡一。R本人自食惡果不足惜颤殴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鼻忠。 院中可真熱鬧涵但,春花似錦、人聲如沸帖蔓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)塑娇。三九已至芥永,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钝吮,已是汗流浹背埋涧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奇瘦,地道東北人棘催。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像耳标,于是被迫代替她去往敵國(guó)和親醇坝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容