日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

大家有沒(méi)有想過(guò)如何統(tǒng)計(jì)活躍用戶數(shù)量?如果是自己做,那該怎么做?

這里思考一分鐘,后面我將分享一下如何使用 redis 中的位圖來(lái)統(tǒng)計(jì)活躍用戶數(shù)。

正文

什么是位圖 ?

位圖(bitmap)是二進(jìn)制的 byte 數(shù)組 ,也可以簡(jiǎn)單理解成是一個(gè)普通字符串。它將二進(jìn)制數(shù)據(jù)存儲(chǔ)在 byte 數(shù)組中以達(dá)到存儲(chǔ)數(shù)據(jù)的作用。

Redis 位圖基礎(chǔ)到統(tǒng)計(jì)活躍用戶

 

圖 1.1

如何使用位圖 ?

理清概念

在解釋什么是位圖的時(shí)候說(shuō)過(guò),位圖可以理解成是一個(gè)普通字符串, 那么我們?yōu)槭裁匆梦粓D而不是字符串呢 ?

下面是在 redis 中存儲(chǔ)字符串的一個(gè)示意圖

Redis 位圖基礎(chǔ)到統(tǒng)計(jì)活躍用戶

 

圖 2.1

如圖,存儲(chǔ)字符串是將字符串二進(jìn)制數(shù)組的形式存儲(chǔ)在 redis 中,位圖可以直接對(duì) 二進(jìn)制的數(shù)組操作, 位圖的優(yōu)勢(shì)在于可以用 0 和 1來(lái)存儲(chǔ)布爾值,這大大降低了我們的存儲(chǔ)空間消耗 。由于這個(gè)特性,我們 用位圖來(lái)記錄簽到信息,記錄活躍用戶等 ,可以達(dá)到節(jié)省空間的能力(后面會(huì)有介紹)。

那我們?nèi)绾螌?duì)二進(jìn)制的數(shù)組進(jìn)行操作呢?

基本存取

setbit | getbit

上文說(shuō)的二進(jìn)制數(shù)組我們可以對(duì)它做 添加、查找及修改 的功能

如何進(jìn)行添加和查找呢?

setbit [keyName] [offset] [value]

offset:偏移量,指的是數(shù)組的下標(biāo); value: 數(shù)據(jù), 只能是 0 和 1。

這條命令既可以添加數(shù)據(jù)也可以修改數(shù)據(jù)。

如何進(jìn)行查找呢 ?

getbit [keyName] [offset]

offset:偏移量,指的是數(shù)組的下標(biāo)。這里,除了設(shè)置 value 為 1 的 offset, 查詢其他的都返回 0

補(bǔ)充:上面說(shuō)了位圖可以理解成字符串,那么它們之間可以互相操作嗎?

Redis 位圖基礎(chǔ)到統(tǒng)計(jì)活躍用戶

 

圖 2.2

請(qǐng)對(duì)照上圖,我們一起完成下面的探究:

  1. 以字符串存儲(chǔ),可以通過(guò) getbit 命令獲取到值嗎?我們可以結(jié)合查詢和圖片所示的 offset 及所對(duì)應(yīng)的值來(lái)驗(yàn)證> set str hi OK > getbit str 0 (integer) 0 > getbit str 4 (integer) 1 > getbit str 7 (integer) 0 > getbit str 15 (integer) 1 復(fù)制代碼結(jié)論:可以的
  2. 以字符串存儲(chǔ),可以通過(guò) settbit 修改值嗎?我們可以試著將 offset 7 對(duì)應(yīng)的 value 改成 1, 如果成功了,h 字符應(yīng)該變成 i> setbit str 7 1 (integer) 0 > get str "ii" 復(fù)制代碼結(jié)論:可以
  3. 用 setbit 存儲(chǔ)字符串的二進(jìn)制數(shù)據(jù),可以通過(guò) get 獲取字符串嗎?我們將 字符 h 的二進(jìn)制存入位圖,看可以能通過(guò) get 獲取> setbit bitmap 0 0 (integer) 0 > setbit bitmap 1 1 (integer) 0 > setbit bitmap 2 1 (integer) 0 > setbit bitmap 3 0 (integer) 0 > setbit bitmap 4 1 (integer) 0 > setbit bitmap 5 0 (integer) 0 > setbit bitmap 6 0 (integer) 0 > setbit bitmap 7 0 (integer) 0 > get bitmap "h" 復(fù)制代碼結(jié)論:可以

上面介紹了位圖的基本概念和使用,通過(guò)一系列的探究希望能幫助大家更好的理解位圖

那么,如何將位圖應(yīng)用的項(xiàng)目中呢?

統(tǒng)計(jì)和查找

bitcount | bitpos

bitcount 是用來(lái)查找 1 出現(xiàn)的次數(shù),既可以對(duì)位圖使用也可以對(duì)字符串使用 ,用法如下:

bitcount [keyName] [startWith] [endWith]

注意:這里的 startWith 和 endWith 不是二進(jìn)制數(shù)組的下標(biāo)(offset)

這里的 startWith 和 endWith 可以理解成是字符串的下標(biāo),一個(gè)字符串對(duì)應(yīng) 8 位二進(jìn)制數(shù)據(jù);它們相當(dāng)于是截取字符串,如 s= "hi" , s[0:0] = "h" , 它所對(duì)應(yīng)的二進(jìn)制數(shù)組的下標(biāo)是 0,7,以此類推。

其實(shí)這里不好解釋,先來(lái)帶代碼,可以結(jié)合著上面的 圖 2.2 看一下,大家后面可以在領(lǐng)悟一下

> set str hi
> bitcount str 0 0
(integer) 4
> bitcount str 0 1
(integer) 8
> bitcount str
(integer) 8

注意:startWith 和 endWith 不設(shè)置的時(shí)候默認(rèn)全部范圍

應(yīng)用場(chǎng)景: 統(tǒng)計(jì)活躍用戶的數(shù)量

bitpos 用來(lái)查找指定范圍內(nèi)出現(xiàn)的第一個(gè) 0 或 1 ,用法如下:

bitpos [keyName] [bit] [start] [end]

bit: 要找的 0 或者 1, start 和 end 同上面的 startWith 和 endWith

應(yīng)用場(chǎng)景: 獲取第一次簽到和第一次未簽到的時(shí)間

應(yīng)用場(chǎng)景

上面大致說(shuō)了 2 個(gè)應(yīng)用場(chǎng)景:

  1. 統(tǒng)計(jì)活躍用戶的數(shù)量
  2. 獲取第一次簽到和第一次未簽到的時(shí)間

我在這里稍微介紹一下思路,然后附上一個(gè) 統(tǒng)計(jì)活躍用戶的數(shù)量 可供參考

統(tǒng)計(jì)活躍用戶的數(shù)量

  1. 將位圖的 keyName 設(shè)置成需要統(tǒng)計(jì)的 行為和時(shí)間范圍 [ation:date], 如: login:2020-3
  2. 將用戶對(duì)應(yīng)到位圖中的 offset , 如 id 對(duì)應(yīng)二進(jìn)制數(shù)組的下標(biāo), id 為 int
  3. 簽到成功使用 setbit 將對(duì)應(yīng)的 offset 設(shè)置成 1
  4. 使用 bitcount 統(tǒng)計(jì)某個(gè) 行為和時(shí)間范圍 的活躍人數(shù),如 bitcount login:2020-3

Demo: DailyActiveUsers

獲取第一次簽到和第一次未簽到的時(shí)間

  1. 將位圖的 keyName 設(shè)置成需要統(tǒng)計(jì)的 行為和時(shí)間范圍和對(duì)象 [ation: date:person], 如: login:2020-3:Tom
  2. 將日期對(duì)應(yīng)到位圖中的 offset , 如 1號(hào)對(duì)應(yīng)二進(jìn)制數(shù)組的下標(biāo) 0, 2 號(hào)為 1
  3. 簽到成功使用 setbit 將對(duì)應(yīng)的 offset 設(shè)置成 1
  4. 使用 bitpos 統(tǒng)計(jì)某個(gè) 行為和時(shí)間范圍和對(duì)象 的簽到情況,如 bitpos login:2020-3:Tom 1

分享到:
標(biāo)簽:Redis
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定