• 位图


    节衣缩食一一位图

    Redis 提供了位图数据结构,位图的最小单位是比特(bit ),每个 bit 的取值只能是0 或 1,可以使用普通的 get/ set 直接获取和设置整个位图的内容,也可以使用位图操作 getbit/setbit 等将 byte 数组看成“位数组”来处理。

    setbit key offset value get key getbit key offset

    基本用法

    位数组的顺序和字符的位顺序是相反的

    零存整取:“零存”就是使用 setbit 对位值进行逐个设置, “整存”就是使用字符串 一次性填充所有位数组,覆盖掉旧值。

    零存零取: 使用单个位操作设置位值, 使用单个位操作获取具体位值。

    整存零取:使用字符串操作批量设置位值,使用单个位操作获取具体位值。(如果对应位的字节是不可打印字符, redis cli 会显示该字符的十六进制形式。)

    统计和查找

    位图统计指令 bitcount 和位图查找指令 bitpos。bitcount 用来统计指定位置范围内 1 的个数, bitpos 用来查找指定范围内出现的第一个 0 或 1.

    bitcount key [start end] bitpos key bit start end

    魔术指令 bitfield

    bitfield可以一次进行多个位的操作。bitfield 有三个子指令,分别是 get set incrby, 它们都可以对指定位片段进行读写,但是最多只能处理 64 个连续的位,如果超过 64 位,就得使用多个子指令, bitfield 可以一次执行多个子指令。

    bitfield key get type offset bitfield key get type offset get type offset 。。。

    bitfield key incrby type bit count

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

    incrby ,它用来对指定范围的位进行自增操作,可能会出现溢出操作,Redis 默认的处理是折返。

    饱和截断( sat)

    超过了范围就停留在最大或最小值。 overflow 指令只影响接下来的第一条指令,这条指令执行完后溢出策略会变成默认值折返( wrap )。

    bitfield key overflow sat incrby type bit count

    失败不执行( fail)

    bitfield key overflow fail incrby type bit count

    四两拨千斤——HyperLogLog

    HyperLogLog 提供不精确的去重计数方案,标准误差是 0.81%。

    使用方法

    提供了两个指令 pfadd(增加计数) 和pfcount(获取计数),与set集合里面的sadd和scard的用法是一样的。

    pfmerge 适合的场合

    用于将多个 pf 计数值累加在一起形成一个新的 pf 值。

  • 相关阅读:
    8051单片机指令和寻址方式
    C/C++的关系
    go JSON 读写到文件
    Oracle 对未提交事务的查询
    win8 iis 安装
    Silverlight 项目 对话框
    VisualSVN错误 Cannot query proxy blanket解决办法
    silverlight浏览器自适应问题
    windows server2003 多用户登陆问题解决办法
    silverlight 缺少对象错误
  • 原文地址:https://www.cnblogs.com/zzy8080/p/14017991.html
Copyright © 2020-2023  润新知