Redis中的bitmap详解

 更新时间:2021年10月25日 16:24:41   作者:小乐乐的天台  
BitMap是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省储存空间,下面通过本文给大家介绍Redis中的bitmap知识,感兴趣的朋友一起看看吧

1、什么是bitmap?

bitmap也叫位图,也就是用一个bit位来表示一个东西的状态,我们都知道bit位是二进制,所以只有两种状态,0和1。

2、为什么要有bitmap?

bitmap的出现就是为了大数据量而来的,但是前提是统计的这个大数据量每个的状态只能有两种,因为每一个bit位只能表示两种状态。
下面我们直接以一个统计亿级用户活动的状态来说明吧。

3、案例说明

3.1、案例描述

如果有一个上亿用户的系统,需要我们去统计每一天的用户登录情况,我们应该如何去解决?
前提条件:设置在9月19号有下标为100、101、102、103四个用户都登录了系统
设置在9月20号有下标为100、101、102三个用户都登录了系统
提出问题:
1、取出9月19号登录系统的有多少人?
答:直接获取即可。
2、取出9月19号和9月20号连续登录系统的有多少人?
答:两天的数据取&运算。
3、取出9月19号与9月20号任意一天登录的有多少人?
答:两天的数据取|运算。

3.2、解决方案

3.2.1、解决方案1—使用传统数据库解决

如果我们需要使用传统的数据库去统计的话,我么需要创建一张表,然后某个用户登录了,我们就去在表里面插上一条记录,登记用户的id,用户登录的时间等等,但是这样出现的问题就是,每一天的数据量都很大,我们在统计日活时,效率就很低,所以这种解决方案是不能被考虑的。

3.2.2、解决方案2—使用bitmap解决

既然用户登录只有两种状态,那么,我们就可以用bitmap
比如0表示未登录,1表示登录

// 设置在9月19号有下标为100、101、102、103四个用户都登录了系统 start
127.0.0.1:6379> setbit login_09_19 100 1
(integer) 0
127.0.0.1:6379> setbit login_09_19 101 1
(integer) 0
127.0.0.1:6379> setbit login_09_19 102 1
(integer) 0
127.0.0.1:6379> setbit login_09_19 103 1
(integer) 0
// 设置在9月19号有下标为100、101、102、103四个用户都登录了系统 end

// 设置在9月20号有下标为100、101、102三个用户都登录了系统 start
127.0.0.1:6379> setbit login_09_20 100 1
(integer) 0
127.0.0.1:6379> setbit login_09_20 101 1
(integer) 0
127.0.0.1:6379> setbit login_09_20 102 1
(integer) 0
// 设置在9月20号有下标为100、101、102三个用户都登录了系统 end

// 取出9月19号登录系统的有多少人? start
127.0.0.1:6379> bitcount login_09_19
(integer) 4
// 取出9月19号登录系统的有多少人? end

// 取出9月19号和9月20号连续登录系统的有多少人?start
127.0.0.1:6379> bitop and login_in_09_19_20:and login_09_19 login_09_20
(integer) 13
127.0.0.1:6379> bitcount login_in_09_19_20:and
(integer) 3
// 取出9月19号和9月20号连续登录系统的有多少人?end

// 取出9月19号与9月20号任意一天登录的有多少人?start
127.0.0.1:6379> bitop or login_in_09_19_20:or login_09_19 login_09_20
(integer) 13
127.0.0.1:6379> bitcount login_in_09_19_20:or
(integer) 4
// 取出9月19号与9月20号任意一天登录的有多少人?end

在这里插入图片描述

到此这篇关于Redis中的bitmap详解的文章就介绍到这了,更多相关Redis中的bitmap内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis调用Lua脚本及使用场景快速掌握

    Redis调用Lua脚本及使用场景快速掌握

    Redis 是一种非常流行的内存数据库,常用于数据缓存与高频数据存储。大多数开发人员可能听说过redis可以运行 Lua 脚本,但是可能不知道redis在什么情况下需要使用到Lua脚本
    2022-03-03
  • 基于Redis的限流器的实现(示例讲解)

    基于Redis的限流器的实现(示例讲解)

    下面小编就为大家分享一篇基于Redis的限流器的实现(示例讲解),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 在redhat6.4安装redis集群【教程】

    在redhat6.4安装redis集群【教程】

    这篇文章主要介绍了在redhat6.4安装redis集群【教程】,需要的朋友可以参考下
    2016-05-05
  • Redis异常测试盘点分析

    Redis异常测试盘点分析

    这篇文章主要为大家介绍了Redis异常测试盘点分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • redis在Windows中下载及安装、设置教程

    redis在Windows中下载及安装、设置教程

    这篇文章主要介绍了Windows中redis的下载及安装、设置教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • redis事务_动力节点Java学院整理

    redis事务_动力节点Java学院整理

    这篇文章主要介绍了redis事务,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Redis分布式限流的几种实现

    Redis分布式限流的几种实现

    分布式限流是指通过将限流策略嵌入到分布式系统中,以控制流量或保护服务,本文就来介绍一下Redis分布式限流的几种实现,感兴趣的可以了解一下
    2023-12-12
  • 使用redis实现延迟通知功能(Redis过期键通知)

    使用redis实现延迟通知功能(Redis过期键通知)

    这篇文章主要介绍了使用redis实现延迟通知功能(Redis过期键通知)的相关知识,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-09-09
  • Redis字符串原理的深入理解

    Redis字符串原理的深入理解

    这篇文章主要给大家介绍了关于Redis字符串原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Redis Server启动过程的详细步骤

    Redis Server启动过程的详细步骤

    本文主要介绍了Redis Server启动过程的详细步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论