redis10 Setbit 的實際應用

2021-09-07 16:27:28 字數 1816 閱讀 5813

setbit 的實際應用

場景: 1億個使用者, 每個使用者 登陸

/做任意操作 ,記為 今天活躍,否則記為不活躍

每週評出: 有獎活躍使用者: 連續7天活動,每月評,等等。

思路:

userid dt active

12013-07

-2711

2013

-0726

1如果是放在表中,

1:表急劇增大,2

:要用group ,sum運算,計算較慢

用: 位圖法

bit-

maplog0721: 『

011001...............0』 //一天:1,2

,5號使用者登陸了

......

log0726 : 『

011001...............0』 //

1,2,5號使用者登陸了

log0727 : 『

0110000.............1』1

: 記錄使用者登陸:

每天按日期生成乙個位圖, 使用者登陸後,把user_id位上的bit值置為1

2: 把1周的點陣圖 and

計算, 各位都為1的,即是連續登陸的使用者

redis

127.0.0.1:6379

> setbit mon 1000000000(

integer) 0

redis

127.0.0.1:6379

> setbit mon 31(

integer) 0

redis

127.0.0.1:6379

> setbit mon 51(

integer) 0

redis

127.0.0.1:6379

> setbit mon 71(

integer) 0

redis

127.0.0.1:6379

> setbit thur 1000000000(

integer) 0

redis

127.0.0.1:6379

> setbit thur 31(

integer) 0

redis

127.0.0.1:6379

> setbit thur 51(

integer) 0

redis

127.0.0.1:6379

> setbit thur 81(

integer) 0

redis

127.0.0.1:6379

> setbit wen 1000000000(

integer) 0

redis

127.0.0.1:6379

> setbit wen 31(

integer) 0

redis

127.0.0.1:6379

> setbit wen 41(

integer) 0

redis

127.0.0.1:6379

> setbit wen 61(

integer) 0

redis

127.0.0.1:6379

> bitop and

res mon feb wen

(integer) 12500001

如上例,優點:

1: 節約空間, 1億人每天的登陸情況,用1億bit,約1200wbyte,約10m 的字元就能表示

2: 計算方便

對redis中setbit命令的理解

這個是setbit使用方法的簡單說明 在redis中,儲存的字串都是以二級制的進行存在的。舉例 設定乙個 key value 鍵的名字叫 andy 值為字元 a 我們知道 a 的ascii碼是 97。轉換為二進位制是 01100001。offset的學名叫做 偏移 二進位制中的每一位就是offset...

基於Redis的BloomFilter實戰

離線資料處理與實時資料處理有很大的不同,其中乙個例子就是去重。在聚資料中,訪問uv和購買uv都需要實時的去重。離線處理的時候,我們可以通過count groupby 或者count distinct 等方式比較容易的計算出uv,而且不用太擔心效能,大不了就是多一點map或者執行時間久一點。那麼在實時...

Spring Boot中redis的配置例項

redis是目前業界使用最廣泛的記憶體資料儲存,我們常用作資料快取。相比memcached,redis支援更豐富的資料結構,例如hash,list,set等,同時它也支援資料持久化。而且在乙個spring boot專案中,因為spring boot封裝自動化的特性,redis連線池的配置也相當簡單。...