激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Redis - 拼多多面試:如何用Redis統(tǒng)計(jì)獨(dú)立用戶訪問量?

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

2019-12-08 22:21數(shù)據(jù)庫開發(fā)沙茶敏碎碎念 Redis

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

眾所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遺余力,對(duì)于一些工作3年的開發(fā),稍微優(yōu)秀一點(diǎn)的,都給到30K的Offer。

當(dāng)然,拼多多加班也是出名的,一周上6天班是常態(tài),每天工作時(shí)間基本都是超過12個(gè)小時(shí),也是相當(dāng)辛苦的。

廢話不多說,今天我們來聊一聊拼多多的一道后臺(tái)面試真題,是一道簡(jiǎn)單的架構(gòu)類的題目:

拼多多有數(shù)億的用戶,那么對(duì)于某個(gè)網(wǎng)頁,怎么使用Redis來統(tǒng)計(jì)一個(gè)網(wǎng)站的用戶訪問數(shù)呢?

使用Hash

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

當(dāng)一個(gè)用戶訪問的時(shí)候,如果用戶登陸過,那么我們就使用用戶的id,如果用戶沒有登陸過,那么我們也能夠前端頁面隨機(jī)生成一個(gè)key用來標(biāo)識(shí)用戶。

當(dāng)用戶訪問的時(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)站某一天的訪問量的時(shí)候,就可以直接使用HLEN來得到最終的結(jié)果了。

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

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

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

使用Bitset

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

對(duì)于有大量數(shù)據(jù)的場(chǎng)景,如果我們使用bitset,那么可以節(jié)省非常多的內(nèi)存。

對(duì)于沒有登陸的用戶,我們也可以使用哈希算法,把對(duì)應(yīng)的用戶標(biāo)識(shí)哈希成一個(gè)數(shù)字id。bitset非常的節(jié)省內(nèi)存,假設(shè)有1億個(gè)用戶,也只需要100000000/8/1024/1024約等于12兆內(nèi)存。

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

Redis已經(jīng)為我們提供了SETBIT的方法,使用起來非常的方便,我們可以看看下面的例子。

我們?cè)趇tem頁面可以不停地使用SETBIT命令,設(shè)置用戶已經(jīng)訪問了該頁面,也可以使用GETBIT的方法查詢某個(gè)用戶是否訪問。最后我們通過BITCOUNT可以統(tǒng)計(jì)該網(wǎng)頁每天的訪問數(shù)量。

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

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

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

使用概率算法

對(duì)于拼多多這種多個(gè)頁面都可能非常多訪問量的網(wǎng)站,如果所需要的數(shù)量不用那么準(zhǔn)確,可以使用概率算法。

事實(shí)上,我們對(duì)一個(gè)網(wǎng)站的UV的統(tǒng)計(jì),1億跟1億零30萬其實(shí)是差不多的。

在Redis中,已經(jīng)封裝了HyperLogLog算法,他是一種基數(shù)評(píng)估算法。這種算法的特征,一般都是數(shù)據(jù)不存具體的值,而是存用來計(jì)算概率的一些相關(guān)數(shù)據(jù)。

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

當(dāng)用戶訪問網(wǎng)站的時(shí)候,我們可以使用PFADD命令,設(shè)置對(duì)應(yīng)的命令,最后我們只要通過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ù)也存在一定的誤差。

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

延伸 · 閱讀

精彩推薦
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis全量復(fù)制與部分復(fù)制示例詳解

    Redis全量復(fù)制與部分復(fù)制示例詳解

    這篇文章主要給大家介紹了關(guān)于Redis全量復(fù)制與部分復(fù)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis爬蟲具有一定的參考學(xué)習(xí)...

    豆子先生5052019-11-27
  • RedisRedis 事務(wù)知識(shí)點(diǎn)相關(guān)總結(jié)

    Redis 事務(wù)知識(shí)點(diǎn)相關(guān)總結(jié)

    這篇文章主要介紹了Redis 事務(wù)相關(guān)總結(jié),幫助大家更好的理解和學(xué)習(xí)使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis如何實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離詳解

    Redis如何實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離詳解

    Redis的主從架構(gòu),能幫助我們實(shí)現(xiàn)讀多,寫少的情況,下面這篇文章主要給大家介紹了關(guān)于Redis如何實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離的相關(guān)資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redisredis實(shí)現(xiàn)排行榜功能

    redis實(shí)現(xiàn)排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實(shí)現(xiàn)排行榜功能,本文就來簡(jiǎn)單的介紹一下如何使用,具有一定的參考價(jià)值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redis詳解Redis復(fù)制原理

    詳解Redis復(fù)制原理

    與大多數(shù)db一樣,Redis也提供了復(fù)制機(jī)制,以滿足故障恢復(fù)和負(fù)載均衡等需求。復(fù)制也是Redis高可用的基礎(chǔ),哨兵和集群都是建立在復(fù)制基礎(chǔ)上實(shí)現(xiàn)高可用的...

    李留廣10222021-08-09
  • RedisRedis的配置、啟動(dòng)、操作和關(guān)閉方法

    Redis的配置、啟動(dòng)、操作和關(guān)閉方法

    今天小編就為大家分享一篇Redis的配置、啟動(dòng)、操作和關(guān)閉方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡(jiǎn)5312019-11-14
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個(gè)逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個(gè)逼格詳解

    這篇文章主要給大家介紹了關(guān)于redis中如何使用lua腳本讓你的靈活性提高5個(gè)逼格的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具...

    一線碼農(nóng)5812019-11-18
主站蜘蛛池模板: 国产高潮失禁喷水爽到抽搐视频 | 亚洲va国产va | 久色成人网 | av色在线观看| 成人店女老板视频在线看 | 精品乱码久久久久 | 九九精品在线观看视频 | 成人久久久精品乱码一区二区三区 | 九九精品在线观看视频 | 亚洲欧美日韩精品久久 | 精品久久久久久久久久久下田 | 国产成人高清成人av片在线看 | av影院在线播放 | 久久精品久久精品久久精品 | 亚洲网站一区 | 色爱99| 久久91亚洲精品久久91综合 | 国产在线1区 | 日本网站在线看 | 青草视频在线观看视频 | 久久国产28| av电影在线观看网址 | 日本精品久久久一区二区三区 | 91高清国产 | 色吧综合网 | 妇子乱av一区二区三区 | 国产日本欧美在线观看 | 欧美交在线 | 黄色电影免费提供 | a视频在线播放 | 免费视频a| 一级免费 | 日本精品黄色 | 日韩av成人| 久久精品男人 | 精品国产一区二区三区天美传媒 | 性日本xxx | 日本羞羞的午夜电视剧 | 成人视屏网站 | 13一14毛片免费看 | 成熟女人特级毛片www免费 |