redis 简单整理——bitmaps[十二]
前言
简单介绍一下bitmaps这个东西。
正文
我们都知道bitmaps 翻译过来就是二进制。
那么二进制可以存一些什么呢? 图片、视频,还可也存些什么呢?
现代计算机用二进制(位)作为信息的基础单位,1个字节等于8位,例 如“big”字符串是由3个字节组成,但实际在计算机存储时将其用二进制表 示,“big”分别对应的ASCII码分别是98、105、103,对应的二进制分别是 01100010、01101001和01100111。
许多开发语言都提供了操作位的功能,合理地使用位能够有效地提高内 存使用率和开发效率。Redis提供了Bitmaps这个“数据结构”可以实现对位的操作。
把数据结构加上引号主要因为:
·Bitmaps本身不是一种数据结构,实际上它就是字符串(如图3-10所 示),但是它可以对字符串的位进行操作。
·Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符 串的方法不太相同。
可以把Bitmaps想象成一个以位为单位的数组,数组的 每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。
那么来看一下其命令吧。
本节将每个独立用户是否访问过网站存放在Bitmaps中,将访问的用户 记做1,没有访问的用户记做0,用偏移量作为用户的id。
- setbit key offset value
设置键的第offset个位的值(从0算起),假设现在有20个用户, userid=0,5,11,15,19的用户对网站进行了访问.
具体操作过程如下,unique:users:2016-04-05代表2016-04-05这天的 独立访问用户的Bitmaps:

如果此时有一个userid=50的用户访问了网站,那么Bitmaps的结构变成:

很多应用的用户id以一个指定数字(例如10000)开头,直接将用户id 和Bitmaps的偏移量对应势必会造成一定的浪费,通常的做法是每次做setbit 操作时将用户id减去这个指定数字。
在第一次初始化Bitmaps时,假如偏移 量非常大,那么整个初始化过程执行会比较慢,可能会造成Redis的阻塞。
gitbit key offset

- bitcount [start][end]
bitcount unique:users:2016-04-05
[start]和[end]代表起始和结束字节数,下面操作计算用户id在第1个字节 到第3个字节之间的独立访问用户数
一个字节是8位。
4.Bitmaps间的运算
bitop op destkey key[key....]
bitop是一个复合操作,它可以做多个Bitmaps的and(交集)、or(并 集)、not(非)、xor(异或)操作并将结果保存在destkey中。
bitop and unique:users:and:2016-04-04_03 unique: users:2016-04-03 unique:users:2016-04-03
这个就表示unique:users:and:2016-04-04_03 表示的就是users:2016-04-03 和 unique:users:2016-04-03 都访问过的集合.
- 计算Bitmaps中第一个值为targetBit的偏移量
bitpos unique:users:2016-04-04 1
除此之外,bitops有两个选项[start]和[end],分别代表起始字节和结束字 节,例如计算第0个字节到第1个字节之间,第一个值为0的偏移量.
bitmaps 例子
假设网站有1亿用户,每天独立访问的用户有5千万,如果每天用集合类 型和Bitmaps分别存储活跃用.

如果使用集合那么消耗是500m存储,这是比较恐怖的。
但Bitmaps并不是万金油,假如该网站每天的独立访问用户很少,例如 只有10万(大量的僵尸用户),那么两者的对比如表3-5所示,很显然,这 时候使用Bitmaps就不太合适了,因为基本上大部分位都是0。

结
下一节是HyperLogLog。
redis 简单整理——bitmaps[十二]的更多相关文章
- Redis进阶实践之十二 Redis的Cluster集群动态扩容
一.引言 上一篇文章我们一步一步的教大家搭建了Redis的Cluster集群环境,形成了3个主节点和3个从节点的Cluster的环境.当然,大家可以使用 Cluster info 命令查看Cl ...
- Redis详解(十二)------ 缓存穿透、缓存击穿、缓存雪崩
本篇博客我们来介绍Redis使用过程中需要注意的三种问题:缓存穿透.缓存击穿.缓存雪崩. 1.缓存穿透 一.概念 缓存穿透:缓存和数据库中都没有的数据,可用户还是源源不断的发起请求,导致每次请求都会到 ...
- Redis 学习笔记(十二)Redis 复制功能详解 ----- (error) READONLY You can't write against a read only slave
Redis 复制(Replication)1. 复制介绍分布式数据库为了获取更大的存储容量和更高的并发访问量,会将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上.Redis为了解决 ...
- 【面试 redis】【第十二篇】redis的相关面试问题
redis的相关面试问题 redis教程:http://www.redis.net.cn/tutorial/3501.html ==================================== ...
- 【测试笔记】Redis学习笔记(十二)性能测试
http://blog.csdn.net/yangcs2009/article/details/50781530 Redis测试服务器一 redis_version:2.8.4 www@iZ23s8a ...
- Redis学习笔记(十二) 复制(上)
偷个懒,晚上工作忙的太晚,整个复制功能的内容还没有写完,这里先说一下复制功能的简单应用. 在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制另一个服务器, ...
- 【leetcode 简单】第十二题 报数
报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one 1&quo ...
- Redis学习篇(十二)之管道技术
通过管道技术降低往返时延 当后一条命令不依赖于前一条命令的返回结果时,可以使用管道技术将多条命令一起 发送给redis服务器,服务器执行结束之后,一起返回结果,降低了通信频度.
- Redis学习笔记(十二) 高级命令:服务器管理命令
原文链接:http://doc.redisfans.com/server/index.html save 执行一个同步操作,将redis实例的所有数据以rdb的形式保存到硬盘,一般来说,生产环境很少执 ...
- redis: 持久化(十二)
RDB配置 RDB 是 Redis 默认的持久化方案.在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中.即在指定目录下生成一个dump.rdb文件.Redis 重启会通过加载d ...
随机推荐
- Jmeter如何分布式执行脚本?
Jmeter分布式执行原理: JMeter分布式执行时,选择其中一台作为调度机(master),其他机器作为执行机(slave): master会在本地编辑好jmx压测脚本,执行时,master将jm ...
- 菜单导航tab切换样式的小技巧
1.最终效果 2.HTML结构 <div class="licaiMenu"> <ul class="navi"> <li> ...
- centos7挂载硬盘(大于2T)
配置方法: 1.root账户下,执行 fdisk -l 命令查看挂载的硬盘设备,假设设备号为/dev/sdb,接下来我们使用parted命令来进行GPT分区 2.使用parted命令进行GPT分区 # ...
- 从华为WeAutomate数字机器人论坛,看政企领域的“政务新智理”
从华为WeAutomate数字机器人论坛,看政企领域的"政务新智理" 从政务治理到"政务新智理",华为WeAutomate在政务领域的思考与实践 华为WeAut ...
- vite环境配置mockjs
mockjs使用文档v2.9.6 安装插件 npm i mockjs -S npm i vite-plugin-mock@2.9.6 配置vite.config.ts文件 export default ...
- SPEAK 510全向麦克风无线蓝牙拾音器产品体验及评测
产品简介 大家开会的时候,很多人都直接使用手机app了,比如,zoom,腾讯会议等.既方便又快捷.由于手机设备拾音距离有限,也不是针对会议场景做的,所有,在多人会议的时候,问题就出来了.这个时 ...
- linux下查看端口对应的进程号
在部署服务的时候,会指定对应的端口号,如果想kill 对应的端口,就要找到对应的进程,查看端口对应的进程号,有两种方法: 1.lsof命令,查看系统打开的文件(在linux中,所有的都是文件),需要管 ...
- 关于百分百浏览器(cent browser)无法使用QQ快捷登录问题
个人比较喜欢用百分百浏览器,但是QQ似乎不允许此浏览器进行登录,参考了下网上提供的思路,研究解决了QQ无法登录的问题 主要就设置了下证书,详情步骤见下面图片
- 3DCAT亮相糖酒会,为元宇宙展会提供实时云渲染支持
4月12日,第108届全国糖酒商品交易会(下文简称"糖酒会")在成都正式开幕,吸引了众多酒类企业和行业人士的参与. 图片源自新华社 本次糖酒会上,某展会采用了"双线&qu ...
- 专访|3DCAT如何赋能Matterverse打造3A游戏画面的Sandbox
元宇宙概念自20世纪90年代创造,在21世纪经历20年快速塑形,终于在2021年进入元年,元宇宙概念爆发,受到政府.机构.企业以及网民的高度关注,资本市场一度高涨,相关投资赛道大热. 元宇宙第一股Ro ...