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連線池的配置也相當簡單。...