目錄
REDIS bitmap統計用戶在線測試(可以針對用戶單位快速統計,redis函數統計只返回在線數量)。
文章思想參考:第十章:Redis中bitmap的妙用
Java測試
Redis工具就不提供了,Jedis裏面有提供,自己封裝即可。
package test;
import java.util.List;
import java.util.Set;
import com.xxx.redis.RedisNodeManagerUtil;
import com.xxx.redis.RedisNodeManger;
public class RedisTest {
String node = "aliyun";
String dwCode = "xxxxxxxxxxx";
static {
RedisNodeManger.init();
}
/**
* 用戶在線刪除
*/
public void bitmapUserDelKey(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String key = dwCode;
RedisNodeManagerUtil.del(node, key);
}
/**
* 用戶在線離線設置
*/
public void bitmapUserIdValues(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
long offset = 2020*1000;
String key = dwCode;// 單位編碼標識:在線數量
for (int i = 10; i < 21; i++) {
if(i%2 == 0){
RedisNodeManagerUtil.setbit(node, key, offset+i, true);
}else{
RedisNodeManagerUtil.setbit(node, key, offset+i, false);
}
}
Long count = RedisNodeManagerUtil.bitcount(node, key);
System.out.println("true count key:"+count);
}
/**
* 統計在線數量
*/
public void bitmapCount(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String key = dwCode;
Long count = RedisNodeManagerUtil.bitcount(node, key);
System.out.println("count key:"+count);
count = RedisNodeManagerUtil.bitcount(node, key, 0, Long.MAX_VALUE);
System.out.println("count range key:"+count);
/*count = RedisNodeManagerUtil.bitpos(node, key, true);
System.out.println("bitpos true:"+count);
count = RedisNodeManagerUtil.bitpos(node, key, false);
System.out.println("bitpos false:"+count);*/
}
/**
* 函數入口
*
* @param args
*/
public static void main(String[] args) {
RedisTest test = new RedisTest();
test.bitmapUserDelKey();
test.bitmapUserIdValues();
test.bitmapCount();
}
}
測試結果:
Redis初始化完成
192.168.1.189:6379 redis節點初始化完成
true count key:6
count key:6
count range key:6