Redis中怎么用setbit統(tǒng)計(jì)活躍用戶-創(chuàng)新互聯(lián)

這篇文章主要講解了“Redis中怎么用setbit統(tǒng)計(jì)活躍用戶”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Redis中怎么用setbit統(tǒng)計(jì)活躍用戶”吧!

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了鄭州免費(fèi)建站歡迎大家使用!

一、需求背景

首先,我們來(lái)看一下需求:網(wǎng)站統(tǒng)計(jì)用戶登錄的次數(shù),具體如下:

  • 網(wǎng)站有1億個(gè)用戶,有經(jīng)常登錄的,也有不經(jīng)常登錄的

  • 如何來(lái)記錄用戶的登錄信息

  • 如何查詢活躍用戶:比如:一周內(nèi),登錄3次的

二、使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)

我們使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)(比如:Oracle)來(lái)存儲(chǔ)這樣的數(shù)據(jù)

 每周產(chǎn)生7億條數(shù)據(jù),對(duì)于任何一個(gè)關(guān)系型數(shù)據(jù)庫(kù)來(lái)說(shuō),都是非常不好維護(hù)的,對(duì)性能也會(huì)有很大的影響。

三、使用Redis的setbit操作

Redis支持對(duì)String類型的value進(jìn)行基于二進(jìn)制位的置位操作。通過(guò)將一個(gè)用戶的id對(duì)應(yīng)value上的一位,通過(guò)對(duì)活躍用戶對(duì)應(yīng)的位進(jìn)行置位,就能夠用一個(gè)value記錄所有活躍用戶的信息。如下圖所未,下圖中的bitmap有9個(gè)位被置為1,表示這9個(gè)位上對(duì)應(yīng)的用戶是今天的活躍用戶。其中第15位表示uid為15的用戶,第一位表示uid為0的用戶。(如果你的uid不是從1開(kāi)始的,比如從100000開(kāi)始,實(shí)際上你也可以相應(yīng)的用uid減去初始值來(lái)表示其位數(shù),比如1000000用戶對(duì)應(yīng)到bitmap的第一位)

Redis中怎么用setbit統(tǒng)計(jì)活躍用戶

具體的代碼類似下面這樣:

redis.setbit(key, user_id, 1)

這樣一次記錄的復(fù)雜度是O(1),在Redis中速度非???。

下面代碼是在Redis CLI中執(zhí)行的Demo演示,比如:用戶ID為100的用戶在星期一登錄了網(wǎng)站,我們就通過(guò)setbit操作,把星期一對(duì)應(yīng)的100位的值置為1,

127.0.0.1:6379> setbit monday 100 1(integer) 0

而我們通過(guò)每天換用一個(gè)不同的key來(lái)將每天的活躍用戶狀態(tài)記錄分開(kāi)存。并且可以通過(guò)一些與或運(yùn)算計(jì)算出N天活躍用戶,和連接N天活躍用戶這樣的統(tǒng)計(jì)數(shù)據(jù)。

如下圖,第一行表示星期一的活躍用戶情況,第二行表示周二的,以此類推。為樣我們通過(guò)對(duì)N天的活躍用戶記錄取并集操作,就能得出在N天內(nèi)活躍過(guò)的用戶列表。

感謝各位的閱讀,以上就是“Redis中怎么用setbit統(tǒng)計(jì)活躍用戶”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Redis中怎么用setbit統(tǒng)計(jì)活躍用戶這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)站標(biāo)題:Redis中怎么用setbit統(tǒng)計(jì)活躍用戶-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://bm7419.com/article36/didosg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、外貿(mào)建站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司域名注冊(cè)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化