redis 使用bitMap实现统计系统在线用户数量

BitMap,简单来说,其实也就是 byte 数组,用二进制表示,一个bit的值,或者是0,或者是1;也就是说一个bit能存储的最多信息是2。它用一个bit位来标记某个元素对应的Value。因为它采用了Bit为单位来存储数据,可以大大节省存储空间。
小编今天主要介绍一下,redis中对bitmap的应用:
先来了解一下结构图:
redis 使用bitMap实现统计系统在线用户数量_第1张图片redis-bitmap常用指令:

  1. getbit key offset 对key所存储的字符串值,获取指定偏移量上的位(bit)
  2. setbit key offset value 设置偏移量值
  3. bitcount key [start end] 获取位图指定范围中位值为1的个数。如果不指定start与end,默认获取所有值为1的个数。
  4. bitop op destKey key1 [key2…] 做多个BitMap的and(交集)、or(并集)、not(非)、xor(异或)操作并将结果保存在destKey中
  5. bitpos key tartgetBit [start end] 计算位图指定范围第一个偏移量对应的的值等于targetBit的位置找不到返回-1 start与end没有设置,则取全部 targetBit只能取0或者1

小编做了一个统计系统在线人数的小demo:

1.Redis工具类:

	/**
	*设置偏移量值
	**/
	public void setBitMap(String key,Integer userId,boolean flag){
		ValueOperations valueOperations=redisTemplate.opsForValue();
		valueOperations.setBit(key,userId,flag);
	}
	/**
	*进行统计
	**/
	public long bitCount(String key){
		return redisTemplate.execute(new RedisCallback<Long>() {
			@Override
			public Long doInRedis(RedisConnection redisConnection) throws DataAccessException {
				return redisConnection.bitCount(key.getBytes());
			}
		});
	}

2.当用户登陆时,通过setBitMap,记录用户上线。当用户登出时,将偏移量的值设置为0
3.在相关业务代码中通过调用bitCount方法实现 对在线人数的统计。

你可能感兴趣的:(★——计算机学习之旅——)