一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - 拼多多面試:如何用Redis統計獨立用戶訪問量?

拼多多面試:如何用Redis統計獨立用戶訪問量?

2019-12-08 22:21數據庫開發沙茶敏碎碎念 Redis

今天我們來聊一聊拼多多的一道后臺面試真題,是一道簡單的架構類的題目:拼多多有數億的用戶,那么對于某個網頁,怎么使用Redis來統計一個網站的用戶訪問數呢?

眾所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遺余力,對于一些工作3年的開發,稍微優秀一點的,都給到30K的Offer。

當然,拼多多加班也是出名的,一周上6天班是常態,每天工作時間基本都是超過12個小時,也是相當辛苦的。

廢話不多說,今天我們來聊一聊拼多多的一道后臺面試真題,是一道簡單的架構類的題目:

拼多多有數億的用戶,那么對于某個網頁,怎么使用Redis來統計一個網站的用戶訪問數呢?

使用Hash

哈希是Redis的一種基礎數據結構,Redis底層維護的是一個開散列,會把不同的key映射到哈希表上,如果是遇到關鍵字沖突,那么就會拉出一個鏈表出來。

當一個用戶訪問的時候,如果用戶登陸過,那么我們就使用用戶的id,如果用戶沒有登陸過,那么我們也能夠前端頁面隨機生成一個key用來標識用戶。

當用戶訪問的時候,我們可以使用HSET命令,key可以選擇URI與對應的日期進行拼湊,field可以使用用戶的id或者隨機標識,value可以簡單設置為1。

當我們要統計某一個網站某一天的訪問量的時候,就可以直接使用HLEN來得到最終的結果了。

拼多多面試:如何用Redis統計獨立用戶訪問量?

優點:簡單,容易實現,查詢也是非常方便,數據準確性非常高。

缺點:占用內存過大,。隨著key的增多,性能也會下降。小網站還行,拼多多這種數億PV的網站肯定受不了。

使用Bitset

我們知道,對于一個32位的int,如果我們只用來記錄id,那么只能夠記錄一個用戶,但如果我們轉成2進制,每位用來表示一個用戶,那么我們就能夠一口氣表示32個用戶,空間節省了32倍!

對于有大量數據的場景,如果我們使用bitset,那么可以節省非常多的內存。

對于沒有登陸的用戶,我們也可以使用哈希算法,把對應的用戶標識哈希成一個數字id。bitset非常的節省內存,假設有1億個用戶,也只需要100000000/8/1024/1024約等于12兆內存。

拼多多面試:如何用Redis統計獨立用戶訪問量?

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

我們在item頁面可以不停地使用SETBIT命令,設置用戶已經訪問了該頁面,也可以使用GETBIT的方法查詢某個用戶是否訪問。最后我們通過BITCOUNT可以統計該網頁每天的訪問數量。

拼多多面試:如何用Redis統計獨立用戶訪問量?

優點:占用內存更小,查詢方便,可以指定查詢某個用戶,數據可能略有瑕疵,對于非登陸的用戶,可能不同的key映射到同一個id,否則需要維護一個非登陸用戶的映射,有額外的開銷。

缺點:如果用戶非常的稀疏,那么占用的內存可能比方法一更大。

使用概率算法

對于拼多多這種多個頁面都可能非常多訪問量的網站,如果所需要的數量不用那么準確,可以使用概率算法。

事實上,我們對一個網站的UV的統計,1億跟1億零30萬其實是差不多的。

在Redis中,已經封裝了HyperLogLog算法,他是一種基數評估算法。這種算法的特征,一般都是數據不存具體的值,而是存用來計算概率的一些相關數據。

拼多多面試:如何用Redis統計獨立用戶訪問量?

當用戶訪問網站的時候,我們可以使用PFADD命令,設置對應的命令,最后我們只要通過PFCOUNT就能順利計算出最終的結果,因為這個只是一個概率算法,所以可能存在0.81%的誤差。

優點:占用內存極小,對于一個key,只需要12kb。對于拼多多這種超多用戶的特別適用。

缺點:查詢指定用戶的時候,可能會出錯,畢竟存的不是具體的數據。總數也存在一定的誤差。

上面就是常見的3種適用Redis統計網站用戶訪問數的方法了。

延伸 · 閱讀

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

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

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

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

    Redis全量復制與部分復制示例詳解

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

    豆子先生5052019-11-27
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redisredis實現排行榜功能

    redis實現排行榜功能

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

    乘月歸5022021-08-05
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

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

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

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

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

    一線碼農5812019-11-18
主站蜘蛛池模板: 香蕉久久高清国产精品免费 | 疯狂伦交1一6 小说 风间由美在线 | 亚洲网站在线播放 | 久草热8精品视频在线观看 久草草在线视视频 | free极度另类性欧美 | 91大神大战高跟丝袜美女 | 国产福利不卡 | 国产精品日韩欧美一区二区三区 | 国产日韩高清一区二区三区 | 女攻双性 | 美女脱得一二净无内裤全身的照片 | 国产精品亚欧美一区二区三区 | 四虎精品成人免费视频 | 欧美成人aaaa免费高清 | 日本69sex护士www| 国产剧情一区 | 亚洲精品成人在线 | 蘑菇香蕉茄子绿巨人丝瓜草莓 | 免费特黄一级欧美大片 | jizz女16处| 色综合视频一区二区观看 | 国产午夜视频在线观看网站 | 91视频国产一区 | 国产成人亚洲综合a∨婷婷 国产成人亚洲精品乱码在线观看 | 国产成人v爽在线免播放观看 | 日本午夜vr影院新入口 | 亚洲精品国产成人99久久 | 欧美高清在线精品一区二区不卡 | 免费永久观看美女视频网站网址 | 成人性色生活片免费网 | 校花被吃奶还摸下面 | 粉嫩高中生第一次不戴套 | 美女扒开屁股让男人进去 | 性欧洲女人18 | 俄罗斯毛片免费大全 | 日本无卡码一区二区三区 | 国产成人91高清精品免费 | 日韩欧一级毛片在线播无遮挡 | 99国产精品免费观看视频 | 脱了白丝校花的内裤猛烈进入 | 国产精品久久久久jk制服 |