本篇內(nèi)容主要講解“如何用 redis 統(tǒng)計(jì)獨(dú)立用戶訪問量”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何用 Redis 統(tǒng)計(jì)獨(dú)立用戶訪問量”吧!
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出通山免費(fèi)做網(wǎng)站回饋大家。
哈希是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)識用戶,當(dāng)用戶訪問的時(shí)候,我們可以使用HSET命令,key可以選擇URI與對應(yīng)的日期進(jìn)行拼湊,field可以使用用戶的id或者隨機(jī)標(biāo)識,value可以簡單設(shè)置為1。
當(dāng)我們要統(tǒng)計(jì)某一個(gè)網(wǎng)站某一天的訪問量的時(shí)候,就可以直接使用HLEN來得到最終的結(jié)果了。
優(yōu)點(diǎn):簡單,容易實(shí)現(xiàn),查詢也是非常方便,數(shù)據(jù)準(zhǔn)確性非常高。
缺點(diǎn):占用內(nèi)存過大,。隨著key的增多,性能也會(huì)下降。小網(wǎng)站還行,拼多多這種數(shù)億PV的網(wǎng)站肯定受不了
我們知道,對于一個(gè)32位的int,如果我們只用來記錄id,那么只能夠記錄一個(gè)用戶,但如果我們轉(zhuǎn)成2進(jìn)制,每位用來表示一個(gè)用戶,那么我們就能夠一口氣表示32個(gè)用戶,空間節(jié)省了32倍!對于有大量數(shù)據(jù)的場景,如果我們使用bitset,那么,可以節(jié)省非常多的內(nèi)存。對于沒有登陸的用戶,我們也可以使用哈希算法,把對應(yīng)的用戶標(biāo)識哈希成一個(gè)數(shù)字id。bitset非常的節(jié)省內(nèi)存,假設(shè)有1億個(gè)用戶,也只需要100000000/8/1024/1024約等于12兆內(nèi)存。
Redis已經(jīng)為我們提供了SETBIT的方法,使用起來非常的方便,我們可以看看下面的例子,我們在item頁面可以不停地使用SETBIT命令,設(shè)置用戶已經(jīng)訪問了該頁面,也可以使用GETBIT的方法查詢某個(gè)用戶是否訪問。最后我們通過BITCOUNT可以統(tǒng)計(jì)該網(wǎng)頁每天的訪問數(shù)量。
優(yōu)點(diǎn)占用內(nèi)存更小,查詢方便,可以指定查詢某個(gè)用戶,數(shù)據(jù)可能略有瑕疵,對于非登陸的用戶,可能不同的key映射到同一個(gè)id,否則需要維護(hù)一個(gè)非登陸用戶的映射,有額外的開銷。
缺點(diǎn)如果用戶非常的稀疏,那么占用的內(nèi)存可能比方法一更大。
對于拼多多這種多個(gè)頁面都可能非常多訪問量的網(wǎng)站,如果所需要的數(shù)量不用那么準(zhǔn)確,可以使用概率算法,事實(shí)上,我們對一個(gè)網(wǎng)站的UV的統(tǒng)計(jì),1億跟1億零30萬其實(shí)是差不多的。在Redis中,已經(jīng)封裝了HyperLogLog算法,他是一種基數(shù)評估算法。這種算法的特征,一般都是數(shù)據(jù)不存具體的值,而是存用來計(jì)算概率的一些相關(guān)數(shù)據(jù)。
當(dāng)用戶訪問網(wǎng)站的時(shí)候,我們可以使用PFADD命令,設(shè)置對應(yīng)的命令,最后我們只要通過PFCOUNT就能順利計(jì)算出最終的結(jié)果,因?yàn)檫@個(gè)只是一個(gè)概率算法,所以可能存在0.81%的誤差。
優(yōu)點(diǎn)占用內(nèi)存極小,對于一個(gè)key,只需要12kb。對于拼多多這種超多用戶的特別適用。
缺點(diǎn)查詢指定用戶的時(shí)候,可能會(huì)出錯(cuò),畢竟存的不是具體的數(shù)據(jù)??倲?shù)也存在一定的誤差。
到此,相信大家對“如何用 Redis 統(tǒng)計(jì)獨(dú)立用戶訪問量”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!