bitmap的原理

bitmap就是通过最小的单位bit(8bit = 1b = 0.001kb)来进行0或者1的设置,表示某个元素对应的值或者状态。一个bit的值,或者是0,或者是1;也就是说一个bit能存储的最多信息是2。

优点

  • 基于最小的单位bit进行存储,所以非常省空间。
  • 设置时候时间复杂度O(1)、读取时候时间复杂度O(n),操作是非常快的。
  • 二进制数据的存储,进行相关计算的时候非常快。
  • 方便扩容

缺点

redis中bit映射被限制在512MB之内,所以最大是2^32位。建议每个key的位数都控制下,因为读取时候时间复杂度O(n),越大的串读的时间花销越多。

用法

setBit

给一个指定key的值得第offset位 赋值为value。

  • 参数:key offset value: bool or int (1 or 0)
  • 返回值:LONG: 0 or 1

getBit

返回一个指定key的二进制信息

  • 参数:key offset
  • 返回值:LONG

bitCount

返回一个指定key中位的值为1的个数(是以byte为单位不是bit)

  • 参数:key start offset
  • 返回值:LONG

bitOp

对不同的二进制存储数据进行位运算(AND、OR、NOT、XOR)

  • 参数:operation destkey key [key …]
  • 返回值:LONG

使用场景

用户在线状态

使用bitmap是一个节约空间效率又高的一种方法,只需要一个key,然后用户id为偏移量offset,如果在线就设置为1,不在线就设置为0,3亿用户只需要36MB的空间。

$status = 1;$redis->setBit('online', $uid, $status);$redis->getBit('online', $uid);

统计用户连续活跃天数

设定一个初始时间,往后每加一天即对应value中的offset的位置。

$start_date = '20170708';$end_date = '20170709';$offset = floor((strtotime($start_date) - strtotime($end_date)) / 86400);$redis->setBit('sign_123456', $offset, 1);//算活跃天数$redis->bitCount('sign_123456', 0, -1)

bitmap 转byte[]后读取_闲谈redis的bitmap相关推荐

  1. poi导出excel写入公式_【java poi 写入Excel后读取公式值问题】poi导入excel

    java poi 写入Excel后读取公式值问题 不用改公式,只需要用cell.getNumericCellValue()获取,读出来就是正确的值了,如果你读出来的还有问题,说明你其他的地方写的还有问 ...

  2. Golang_实战_连接redis

    Golang 文章目录 Golang 1 何为redis 2 连接redis 2.1 读写 2.2 检测值是否存在 2.3 删除 2.4 读写json到redis 2.5 设置过期时间 2. 6 列表 ...

  3. 一看就懂系列之 详解redis的bitmap在亿级项目中的应用

    前言 这是一篇拖了很久的总结,项目中引入了redis的bitmap的用法,感觉挺高大上的,刨根问底,故留下总结一篇当作纪念. 说清楚几个问题: 1.bitmap的原理.用法. 2.bitmap的优势. ...

  4. java基于OpenCv图像处理_读取_保存图片

    java基于openCv图像处理_读取_保存图片 本文使用javaCV封装后的OpenCv <dependency><groupId>org.bytedeco</grou ...

  5. Redis中bitmap的妙用

    在Redis中我们经常用到set,get等命令,细心的你有没有发现,还有几个相似的命令叫setbit,getbit,它们是用来干嘛的? BitMap是什么 就是通过一个bit位来表示某个元素对应的值或 ...

  6. WPF中的Bitmap与byte

    WPF中的Bitmap与byte 原文:WPF中的Bitmap与byte public MainWindow(){InitializeComponent();byte[] b = GetPicture ...

  7. redis一般用来干嘛_谈谈redis的热key问题如何解决

    公众号:孤独烟 ,作者:孤独烟 引言 今天我们来写redis方面的内容,谈谈热key问题如何解决. 其实热key问题说来也很简单,就是瞬间有几十万的请求去访问redis上某个固定的key,从而压垮缓存 ...

  8. 安卓图片操作(调用系统相机,预览本地照片,调用系统裁剪图片,压缩图片,中心裁剪方形图片,bitmap转byte[])

    先创建照片存储uri public static Uri createImagePathUri(Context context) {Uri imageFilePath = null;String st ...

  9. 从本地或者网络读取图片,并转换为Bitmap图片

    在做android项目时,我们经常需要从本地或者网络读取图片,并转换为Bitmap图片,以便使用,下面是读取本地图片并转换的方法: Java代码   /** * 得到本地或者网络上的bitmap ur ...

最新文章

  1. 负起责任、审慎对待论文创新和性能指数,ACM Fellow罗杰波教授分享他的审稿经验...
  2. python 笔记 之 sqlalchemy操作数据库-创建表
  3. php 线条的绘制,在非常高的图像上使用PHP绘制线条,脚本停止绘制.怎么了,怎么解决?...
  4. python财务-财务方面的学生如何学习python?
  5. harbor登录验证_Harbor 源码浅析
  6. 机器学习部分国内牛人
  7. Python学习笔记:闭包与作用域
  8. STM32F103单片机读取芯片自身ID
  9. 创建第一个Scrapy项目
  10. python提取qq群成员代码_Python提取QQ群成员QQ号及昵称
  11. BT656协议讲解与解码
  12. 保证金监控中心查询期货开户密码
  13. 计算机网络ip地址在哪里设置,网络ip地址设置多少_电脑ip地址一般设置多少-win7之家...
  14. Telnet远程和tracert跟踪命令
  15. 视觉平衡与物理平衡_设计中的构图平衡,对称与反对称
  16. 传奇私服服务器怎么增加npc,传奇私服装备打造NPC设置方法
  17. 开源全景图查看器-360player_v3.0更新
  18. Flash Builder 经典使用技巧
  19. JAVA学习第十四课(接口:implements及其基本应用)
  20. 1978开始的计算机发展史

热门文章

  1. 你必须知道的容器监控 (2) cAdvisor
  2. 基于 EntityFramework 生成 Repository 模式代码
  3. 在编写异步方法时,使用 ConfigureAwait(false) 避免使用者死锁
  4. [Abp vNext 源码分析] - 1. 框架启动流程分析
  5. 将传统 WPF 程序迁移到 DotNetCore 3.0
  6. [小技巧]C#中如何为枚举类型添加描述方法
  7. 通渭县义岗川镇之行(2020年11月19日)
  8. ArcGIS实验教程——实验十七:缓冲区分析(Buffer Analysis)
  9. ArcGIS 10.2中栅格数据的属性表问题
  10. C#窗体的Load事件与Shown事件的区别