1. 程式人生 > >redis10---Setbit 的實際應用

redis10---Setbit 的實際應用

思路 優點 post cti eight gpo 如果 -s style

Setbit 的實際應用
場景: 1億個用戶, 每個用戶 登陸/做任意操作  ,記為 今天活躍,否則記為不活躍
每周評出: 有獎活躍用戶: 連續7天活動,每月評,等等。

思路: 
Userid       dt                 active
1           2013-07-27         1
1           2013-0726           1

如果是放在表中, 1:表急劇增大,2:要用group ,sum運算,計算較慢
用: 位圖法 bit-map
Log0721:  ‘011001...............0//一天:1,2,5號用戶登陸了
......
log0726 :   ‘
011001...............0//1,2,5號用戶登陸了 Log0727 : ‘0110000.............11: 記錄用戶登陸: 每天按日期生成一個位圖, 用戶登陸後,把user_id位上的bit值置為1 2: 把1周的位圖 and 計算, 各位都為1的,即是連續登陸的用戶 redis 127.0.0.1:6379> setbit mon 100000000 0 (integer) 0 redis 127.0.0.1:6379> setbit mon 3 1 (integer) 0 redis 127.0.0.1:6379> setbit mon 5 1 (integer) 0 redis
127.0.0.1:6379> setbit mon 7 1 (integer) 0 redis 127.0.0.1:6379> setbit thur 100000000 0 (integer) 0 redis 127.0.0.1:6379> setbit thur 3 1 (integer) 0 redis 127.0.0.1:6379> setbit thur 5 1 (integer) 0 redis 127.0.0.1:6379> setbit thur 8 1 (integer) 0 redis 127.0.0.1:6379> setbit wen 100000000 0 (integer) 0 redis 127.0
.0.1:6379> setbit wen 3 1 (integer) 0 redis 127.0.0.1:6379> setbit wen 4 1 (integer) 0 redis 127.0.0.1:6379> setbit wen 6 1 (integer) 0 redis 127.0.0.1:6379> bitop and res mon feb wen (integer) 12500001 如上例,優點: 1: 節約空間, 1億人每天的登陸情況,用1億bit,約1200WByte,約10M 的字符就能表示 2: 計算方便

redis10---Setbit 的實際應用