redis 利用setbit實現活躍使用者統計

2021-08-19 21:49:12 字數 790 閱讀 8313

setbit: 的偏移量是從左第0位開始計數

場景: 1億個使用者, 每個使用者登陸/做任意操作  ,記為 今天活躍,否則記為不活躍

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

用: 位圖法 bit-map

利用每個使用者的id號做offset偏移設定為1

log0721: 『011001...............0』

......

log0726 :  『011001...............0』

log0727 : 『0110000.............1』

1: 記錄使用者登陸:

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

2: 把1周的點陣圖  and 計算,

位上為1的,即是連續登陸的使用者

如上例,優點:

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

2: 計算方便

利用bitcount可以進去區間統計活躍使用者數量:

redis的setbit修改的是bit位置,而bitcount檢查的是byte位置,兩者相差有8的倍數,

所以在setbit 前把offset * 8 才

$start = 1;

$offset = #start*8;

$redis->setbit('bit', $offset,1)

$count = $redis->bitcount('bit',$start,-1);

echo $count;

對redis中setbit命令的理解

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

redis10 Setbit 的實際應用

setbit 的實際應用 場景 1億個使用者,每個使用者 登陸 做任意操作 記為 今天活躍,否則記為不活躍 每週評出 有獎活躍使用者 連續7天活動,每月評,等等。思路 userid dt active 12013 07 2711 2013 0726 1如果是放在表中,1 表急劇增大,2 要用grou...

利用AOP實現redis快取

1.定義註解 target elementtype.method 作用位置 retention retentionpolicy.runtime 什麼時候有效 public inte ce cachefind 2.使用註解 在方法上使用這個註解 override cachefind key iten ...