• redis操作位图


    简介:

    操作位图,就是操作二进制文件,类似于java中的位运算,这样做的好处,一个是效率高,另一个是节约空间,相比于字符串,效果是很明显的。

    说一个的案例,一个用户一年的签到记录,如果用Sring类型存储,那么就需要365个key/value。那如果使用位图的话,假设网站上线第一天,这个人签到了就存1,没签到就存0,那么就是1101010101。。。。。

    每天的的记录占一个位,365天就是365个位,也就是46个字节,这样有效的节省了存储空间,如果要统计用户签到的天数,只需要统计1的个数。

    位图的操作,可以直接操作对应的字符串(get/set),或者直接操作位(getbit/setbit)

    基本操作:

    1.零存整取:操作的时候用位操作,获取的时候获取字符串

    例如存一个java

    字符 ASCII 二进制
    j 74 01001010
    a 77 01100001
    v 118 01110110

    接下来去存储

    存java:默认是0,所以只存1

      setbit name 1    1

      setbit name 4    1

      setbit name 6    1 

      setbit name 9    1

      setbit name 10  1

      setbit name 15  1 

      setbit name 17  1

      setbit name 18  1

      setbit name 19  1 

      setbit name 21  1

      setbit name 22  1 

      setbit name 25  1 

      setbit name 26  1

      setbit name  31  1 

    取java:

      get name

    2.整存零取:操作的时候用字符串操作,获取的时候用位获取

    存字符串:

    set k1 java

    取:

    3.零存零取

    统计:

    1的个数表示签到的天数,0表示没有签到

    用bitcount  key命令

    bitpos也是统计,不过是范围统计,比在指定范围内出现的第一个零或者一。如统计这个用户在某个时间段的签到次数

    bit的批处理

    在redis新加的功能,bitfiled命令

    例如:bitfiled name get  u4 0:表示获取name中的位,从零开始,获取4个位,返回一个无符号数字。

               bitfiled name get  i4 0:表示获取name中的位,从零开始,获取4个位,返回一个有符号数字。

  • 相关阅读:
    WebStorm下配置supervisor热部署NodeJS
    Node.js如何使用MySQL的连接池实例
    node.js中mysql连接池的使用
    VMware10下CentOS7的详细安装图解
    APP数据埋点
    (转载) Mysql----Join用法(Inner join,Left join,Right join, Cross join, Union模拟Full join)及---性能优化
    Python3 _ 读取大文件
    Python3 -- PySQL -- 将函数封装在类中
    Python3 MySQL 数据库连接
    js--同步运动json上
  • 原文地址:https://www.cnblogs.com/javazl/p/12663656.html
Copyright © 2020-2023  润新知