溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2021-11-04 11:51:37 來源:億速云 閱讀:218 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫

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

一、需求背景

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

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

  • 如何來記錄用戶的登錄信息

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

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

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

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

三、使用Redis的setbit操作

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

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

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

redis.setbit(key, user_id, 1)

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

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

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

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

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

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI