zoukankan      html  css  js  c++  java
  • 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个位,返回一个有符号数字。

  • 相关阅读:
    [转载]浅谈如何管理测试团队
    使用 virtualenv
    使用 HTMLTestRunner.py
    Jenkins 十二: 集成 selenium 测试
    [转载]聊一聊人员培养
    Jenkins 十一: 构建Maven项目
    Jenkins 八: 构建Git项目
    Jenkins 九: 小技巧
    jsp详解
    cookie详解
  • 原文地址:https://www.cnblogs.com/javazl/p/12663656.html
Copyright © 2011-2022 走看看