关于位图,可能大家不太熟悉,

那么位图能干啥呢?位图的内容其实就是普通的字符串,也就是byte数组,我们都知道

byte 8 位无符号整数 0 到 255

说个场景。比如你处理一些业务时候,往往会存在 是或者不是 这样的数据,那么这种数据还是频繁去查看和请求,从数据方面和请求次数方面都是非常的大的。那么Redis位图可以帮你解决。每天的记录只占据一个位,他的存储格式:0 1 0 1 0 1。在操作方面我们可以使用:get/set, gitbit/setbit等将byte数组看成【位数组】来处理。

说说他的特性:

位数组是自动扩展的,如果超出现有内容范围,它会自动将位数组进行零扩充。

当然一般这种业务数据,都往往少不了统计,查找,那么位图指令统计bitcount和查找bitpos。bitcount 用来统计指定位置范围内 1 的个数,bitpos 用来查找指定范围内出现的第一个 0 或 1。

bitpos指定的范围是【start,end】。注意的是start 和 end 参数是字节索引,也就是说指定的位范围必须是 8 的倍数,

当然,我们都知道之前指定的位图都是单个位的,当然也有一次操作多个位的,不过必须用管道,不过从3.2版本后。有个bitfield,有三个指令,分别是:get/set/incrby,它们都可以对指定位片段进行读写,但是最多只能处理 64 个连续的位,如果超过 64 位,就得使用多个子指令,bitfield 可以一次执行多个子指令。

 BITFIELD mykey INCRBY i5 100 1 GET u4 0

当需要一个整型时,有符号整型需在位数前加i,无符号在位数前加u。例如,u8是一个8位的无符号整型,i16是一个16位的有符号整型。有符号整型最大支持64位,而无符号整型最大支持63位。对无符号整型的限制,是由于当前Redis协议不能在响应消息中返回64位无符号整数。

所谓有符号数是指获取的位数组中第一个位是符号位,剩下的才是值。如果第一位是 1,那就是负数。无符号数表示非负数,没有符号位,获取的位数组全部都是值。有符号数最多可以获取 64 位,无符号数只能获取 63 位 (因为 Redis 协议中的 integer 是有符号数,最大 64 位,不能传递 64 位无符号值)。如果超出位数限制,Redis 就会告诉你参数错误。
 

最新文章

  1. 用JS获取地址栏参数的方法
  2. const指针
  3. 由浅入深漫谈margin属性1
  4. artTemplate的使用总结
  5. 字符设备驱动: register_chrdev和register_chrdev_region
  6. orm2
  7. 转载+++++iptables详解+++++转载
  8. 论林耐斯-Linux系统的重要性
  9. Apple 内购
  10. 完美解决ubuntu Desktop 16.04 中文版firefox在非root用户不能正常启动的问题
  11. Java程序员必备的Intellij插件
  12. Linux framebuffer deferred io机制
  13. webstorm使用YUIcompressor压缩js css并指定目录
  14. gcc编译c语言程序
  15. Luogu P4137 Rmq Problem / mex
  16. Week 1 工程文档
  17. ERP项目实施记录04
  18. 解决 dpkg: warning: files list file for package 'x' missing 问题
  19. ubuntu16.04安装virtualbox
  20. 8个设计师必看的免费UI图标设计资源站

热门文章

  1. 学习 lind layerdiagram 第三弹
  2. HTTP权威指南之URL与资源
  3. Centos 7 最小化部署svn版本控制(http协议)
  4. shiro中ecache-core版本引起的异常
  5. Lambda 表达式入门,看这篇就够了
  6. 安卓开发实战-记账本APP(三)
  7. centos7 配置虚拟交换机(物理交换机truck端口设置)(使用brctl)
  8. LoadRunner随机数
  9. PT教程 - 应用系列 - ECO修复Timing(理论+实践+脚本分享)
  10. 基于 H5与WebGL 的科幻风机 3D 展示