返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Redis中Bitmap的使用示例
  • 447
分享到

Redis中Bitmap的使用示例

2024-04-02 19:04:59 447人浏览 泡泡鱼
摘要

目录位图应用原理位图常用命令1) SETBIT命令2) GETBIT命令3) BITCOUNT命令4)Redis Bitop 命令场景统计当日活跃用户用户签到在日常开发过程中,经常会

在日常开发过程中,经常会有一些 bool 类型数据需要存取。比如记录用户一年内签到的次数,签了是 1,没签是 0。如果使用 key-value 来存储,那么每个用户都要记录 365 次,当用户成百上亿时,需要的存储空间将非常巨大。解决这个问题,可以使用redis中的位图。

位图(bitmap)同样属于 string 数据类型。Redis 中一个字符串类型的值最多能存储 512 MB 的内容,每个字符串由多个字节组成,每个字节又由 8 个 Bit 位组成。位图结构正是使用“位”来实现存储的,它通过将比特位设置为 0 或 1来达到数据存取的目的,这大大增加了 value 存储数量,它存储上限为2^32。

位图本质上就是一个普通的字节串,也就是 bytes 数组。您可以使用getbit/setbit命令来处理这个位数组,位图的结构如下所示:

位图适用于一些特定的应用场景,比如用户签到次数、或者登录次数等。上图是表示一位用户 10 天内来网站的签到次数,1 代表签到,0 代表未签到,这样可以很轻松地统计出用户的活跃程度。相比于直接使用字符串而言,位图中的每一条记录仅占用一个 bit 位,从而大大降低了内存空间使用率。

Redis 官方也做了一个实验,他们模拟了一个拥有 1 亿 2 千 8 百万用户的系统,然后使用 Redis 的位图来统计“日均用户数量”,最终所用时间的约为 50ms,且仅仅占用 16 MB内存。

位图应用原理

某网站要统计一个用户一年的签到记录,若用 sring 类型存储,则需要 365 个键值对。若使用位图存储,用户签到就存 1,否则存 0。最后会生成 00010101… 这样的存储结果,其中每天的记录只占一位,一年就是 365 位,约为 46 个字节。如果只想统计用户签到的天数,那么统计 1 的个数即可。

位图操作的优势,相比于字符串而言,它不仅效率高,而且还非常的节省空间。

Redis 的位数组是自动扩展的,如果设置了某个偏移位置超出了现有的内容范围,位数组就会自动扩充。

位图常用命令

1) SETBIT命令

用来设置或者清除某一位上的值,其返回值是原来位上存储的值。key 在初始状态下所有的位都为 0 ,示例如下:

SETBIT key offset value

其中 offset 表示偏移量,从 0 开始。示例如下:

127.0.0.1:6379> SET user:1 a
OK
#设置偏移量offset为0
127.0.0.1:6379> SETBIT user:1 0 1
(integer) 0
#当对应位的字符是不可打印字符,redis会以16进制形式显示
127.0.0.1:6379> GET user:1
"\xe1"

2) GETBIT命令

用来获取某一位上的值。示例如下:

127.0.0.1:6379> GETBIT user:1 0
(integer) 1

当偏移量 offset 比字符串的长度大,或者当 key 不存在时,返回 0。

redis> EXISTS bits
(integer) 0
redis> GETBIT bits 100000
(integer) 0

3) BITCOUNT命令

统计指定位区间上,值为 1 的个数。语法格式如下:

BITCOUNT key [start end]

示例如下:

127.0.0.1:6379> BITCOUNT user:1
(integer) 8

通过指定的 start 和 end 参数,可以让计数只在特定的字节上进行。start 和 end 参数和 GETRANGE 命令的参数类似,都可以使用负数,比如 -1 表示倒数第一个位, -2 表示倒数第二个位。.

4)Redis Bitop 命令

对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 desTKEy 上

语法:operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种:

  • BITOP AND destkey key [key …] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。
  • BITOP OR destkey key [key …] ,对一个或多个 key 求逻辑或,并将结果保存到 - destkey 。
  • BITOP XOR destkey key [key …] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。
  • BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey 。

除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入。

场景

统计当日活跃用户

每日活跃统计创建一个bitmap键,当用户活跃了根据用户id的偏移量来设置
对应的位为1

用户签到

每个用户创建一个位图的键,以某一天为基础,之后的天数距离这一天的天数为偏移量,
如果用户点击了签到,则设置对用的偏移位为1。

到此这篇关于Redis中Bitmap的使用示例的文章就介绍到这了,更多相关Redis Bitmap内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Redis中Bitmap的使用示例

本文链接: https://lsjlt.com/news/148905.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis中Bitmap的使用示例
    目录位图应用原理位图常用命令1) SETBIT命令2) GETBIT命令3) BITCOUNT命令4)Redis Bitop 命令场景统计当日活跃用户用户签到在日常开发过程中,经常会...
    99+
    2024-04-02
  • redis的bitmap使用实例分析
    这篇文章主要讲解了“redis的bitmap使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“redis的bitmap使用实例分析”吧!1.位图简介...
    99+
    2024-04-02
  • redis中的bitmap怎么使用
    Redis中的位图(bitmap)是一种特殊的数据结构,用于存储和操作位数据。它可以用于实现一些简单的计数功能,以及判断某个元素是否...
    99+
    2023-09-04
    redis bitmap
  • Redis中的Bitmap如何使用
    今天小编给大家分享一下Redis中的Bitmap如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在日常开发过程中,经常...
    99+
    2023-06-30
  • redis bitmap运用实例
    1.网站用户一年内的上线天数统计(活跃用户) 用户ID为key,天作为offset,上线置为1  366> 000000000000000 366 /8  50Byte  16  50 key:  u500  value:  11...
    99+
    2021-02-24
    redis bitmap运用实例
  • redis中的bitmap实例分析
    本文小编为大家详细介绍“redis中的bitmap实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“redis中的bitmap实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、BitMap是什么通过...
    99+
    2023-06-29
  • Redis中bitmap的用法
    本篇内容介绍了“Redis中bitmap的用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • Redis使用Bitmap的方法实现
    目录1. Bitmap 是什么2. 占用存储空间3. 命令3.1 SETBIT3.2 GETBIT3.3 BITCOUNT3.4 BITOP3.5 BITPOS1. Bitmap 是什么 Bitmap(也称为位数组或者位...
    99+
    2023-01-28
    Redis使用Bitmap
  • Redis中的bitmap详解
    1、什么是bitmap? bitmap也叫位图,也就是用一个bit位来表示一个东西的状态,我们都知道bit位是二进制,所以只有两种状态,0和1。 2、为什么要有bitmap? ...
    99+
    2024-04-02
  • Lumen使用Redis的示例
    这篇文章将为大家详细讲解有关Lumen使用Redis的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 安装扩展要使用redis必须安装两个扩展 comp...
    99+
    2024-04-02
  • 关于Redis中bitmap的原理和使用详解
    目录一、原理二、BitMap 相关命令三、BitMap 空间计算四、使用场景1. 用户签到2. 统计活跃用户(用户登陆情况)3. 统计用户在线状态4. 实现布隆过滤器五、总结一、原理 先声明一下:Redis 有5种数据类...
    99+
    2023-05-16
    Redis bitmap bitmap原理 bitmap使用
  • Redis中的bitmap是什么
    本篇内容主要讲解“Redis中的bitmap是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis中的bitmap是什么”吧!Redis 的位图(bit...
    99+
    2024-04-02
  • redis事务的使用示例
    这篇文章主要介绍了redis事务的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先我们来简单介绍下redis事务的本质:  Red...
    99+
    2024-04-02
  • Redis在PHP应用中的Bitmap操作
    在Web开发领域,Redis是一个非常流行的键值存储数据库,而PHP是一种广泛使用的Web编程语言。Redis提供了许多功能,其中一个非常有用的功能是Bitmap操作。Bitmap是Redis中的一种数据结构,它可以轻松地实现各种位图操作。...
    99+
    2023-05-19
    redis PHP应用 Bitmap操作
  • redis中的bitmap你了解吗
    目录1、BitMap是什么2、setbit命令介绍 总结1、BitMap是什么 通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8个b...
    99+
    2024-04-02
  • Redis中安装与使用的示例分析
    这篇文章主要介绍Redis中安装与使用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、下载:项目地址:https://github.com/MSOpenTech/redi...
    99+
    2024-04-02
  • Redis高级数据类型Hyperloglog、Bitmap的使用
    目录前言Hyperloglog Hyperloglog简介Hyperloglog作用命令行中的使用SpringBoot中的使用Bitmap Bitmap简介Bitmap作用命令行...
    99+
    2024-04-02
  • redis中限流的应用示例
    小编给大家分享一下redis中限流的应用示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么要做限流首先让我们先看一看系统架构设计中,为什么要做“限流”。旅游...
    99+
    2023-06-14
  • SpringBoot2.4.2下使用Redis配置Lettuce的示例
    目录1. Springboot2.4.2下对Redis的基础集成1.1 maven添加依赖1.2 添加Redis配置文件1.3 注册RedisTemplate和StringRedis...
    99+
    2024-04-02
  • Android中Bitmap用法实例分析
    本文实例讲述了Android中Bitmap用法。分享给大家供大家参考,具体如下: 一般在android程序中把图片文件放在res/drawable目录下就可以通过R.drawa...
    99+
    2022-06-06
    bitmap Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作