Redis扩展类型-位图

  1. 位图
    1. 基本用法

位图


  • 什么时候需要用到位图?
    • 平时开发中有一些bool型数据需要存储,比如用户一年的签到记录。为了解决存储空间,Redis提供了位图数据结构,这样365天就是365位,46个字节。
  • 位图是什么?
    • 其实就是普通的字符串,也就是byte数组。
  • 怎么使用位图?
    • 可以使用普通的get/set直接获取和设置整个位图的内容,也可以使用位图操作getbit/setbit等将byte数组看成”位数组”来处理。

基本用法
  • Redis的位数组是自动扩展的,如果设置了某个偏移位置超出了现有的内容范围,就会自动将位数组进行零扩充。

  • 零存整取

    • h的ASCII码:0b1101000
      e的ASCII码:0b1100101
      script
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      127.0.0.1:6379> setbit s 1 1
      (integer) 0
      127.0.0.1:6379> setbit s 2 1
      (integer) 0
      127.0.0.1:6379> setbit s 4 1
      (integer) 0
      127.0.0.1:6379> setbit s 9 1
      (integer) 0
      127.0.0.1:6379> setbit s 10 1
      (integer) 0
      127.0.0.1:6379> setbit s 13 1
      (integer) 0
      127.0.0.1:6379> setbit s 15 1
      (integer) 0
      127.0.0.1:6379> get s
      "he"
  • 整存零取

    • h的ASCII码:0b1101000
      script
      1
      2
      3
      4
      5
      6
      127.0.0.1:6379> set w h
      (integer) 0
      127.0.0.1:6379> getbit w 1
      (integer) 1
      127.0.0.1:6379> getbit w 2
      (integer) 1
  • 如果对应位的字节是不可打印字符,redis-cli会显示该字符的十六进制形式

  • Redis提供了位图统计指令bitcount和位图查找指令bitpos

    • bitcount: 用来统计指定位置范围内的1的个数。
      • 统计用户一共签到多少天
    • bitpos: 用来查找指定范围内出现的第一个0或1。
      • 查找用户从哪一天开始第一次签到。
    • 如果指定范围参数[start,end],就可以统计在某个时间范围内用户签到了多少天,用户自某天以后哪天开始签到
    • 但start和end是字节索引,所以指定的位范围必须是8的倍数

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yanglau0527@gmail.com

文章标题:Redis扩展类型-位图

文章字数:501

本文作者:Cynaith

发布时间:2020-05-02, 02:20:35

最后更新:2020-05-02, 02:22:57

原始链接:https://cynaith.github.io/2020/05/02/Redis%E6%89%A9%E5%B1%95%E7%B1%BB%E5%9E%8B-%E4%BD%8D%E5%9B%BE/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏