Class RedisBitMapUtils

java.lang.Object
cn.herodotus.engine.cache.redis.utils.RedisBitMapUtils

@Component public class RedisBitMapUtils extends Object

Description: Redis BitMap 工具类

· Redis的Bitmaps这个“数据结构”可以实现对位的操作。Bitmaps本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作 · 可把Bitmaps想象成一个以位为单位数组,数组中的每个单元只能存0或者1,数组的下标在bitmaps中叫做偏移量 · 单个bitmaps的最大长度是512MB,即2^32个比特位

bitmaps的最大优势是节省存储空间。比如在一个以自增id代表不同用户的系统中,我们只需要512MB空间就可以记录40亿用户的某个单一信息,相比mysql节省了大量的空间

· 有两种类型的位操作:一类是对特定bit位的操作,比如设置/获取某个特定比特位的值。另一类是批量bit位操作,例如在给定范围内统计为1的比特位个数

1.1 优点:

节省空间:通过一个bit位来表示某个元素对应的值或者状态,其中key就是对应元素的值。实际上8个bit可以组成一个Byte,所以是及其节省空间的。

效率高:setbit和getbit的时间复杂度都是O(1),其他位运算效率也高。

1.2 缺点: 本质上位只有0和1的区别,所以用位做业务数据记录,就不需要在意value的值。

Author:
: gengwei.zheng
See Also:
Date:
: 2022/12/29 17:41
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static Long
    统计对应的bitmap上value为1的数量
    static Long
    bitCount(String key, int start, int end)
    统计指定范围中value为1的数量
    static Long
    bitOp(org.springframework.data.redis.connection.RedisStringCommands.BitOperation op, String saveKey, String... destKey)
    对一个或多个保存二进制的字符串key进行元操作,并将结果保存到saveKey上。
    static Long
    bitOpResult(org.springframework.data.redis.connection.RedisStringCommands.BitOperation op, String saveKey, String... destKey)
    对一个或多个保存二进制的字符串key进行元操作,并将结果保存到saveKey上,并返回统计之后的结果。
    static Boolean
    getBit(String key, long offset)
    获取指定 offset 偏移量的值;
    static boolean
    getBit(String key, String param)
    查询与指定 param 对应二进制位的值,会经过hash计算进行存储。
    static Boolean
    setBit(String key, Long offset, boolean value)
    将指定offset偏移量的值设置为1;
    static Boolean
    setBit(String key, String param, boolean value)
    设置与 param 对应的二进制位的值,会经过hash计算进行存储。
    void
    setStringRedisTemplate(org.springframework.data.redis.core.StringRedisTemplate stringRedisTemplate)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • RedisBitMapUtils

      public RedisBitMapUtils()
  • Method Details

    • setBit

      public static Boolean setBit(String key, String param, boolean value)
      设置与 param 对应的二进制位的值,会经过hash计算进行存储。
      Parameters:
      key - bitmap数据结构的key
      param - 要设置偏移的key,该key会经过hash运算。
      value - true:即该位设置为1,否则设置为0
      Returns:
      返回设置该value之前的值。
    • getBit

      public static boolean getBit(String key, String param)
      查询与指定 param 对应二进制位的值,会经过hash计算进行存储。
      Parameters:
      key - bitmap结构的key
      param - 要移除偏移的key,该key会经过hash运算。
      Returns:
      若偏移位上的值为1,那么返回true。
    • setBit

      public static Boolean setBit(String key, Long offset, boolean value)
      将指定offset偏移量的值设置为1;
      Parameters:
      key - bitmap结构的key
      offset - 指定的偏移量。
      value - true:即该位设置为1,否则设置为0
      Returns:
      返回设置该value之前的值。
    • getBit

      public static Boolean getBit(String key, long offset)
      获取指定 offset 偏移量的值;
      Parameters:
      key - bitmap结构的key
      offset - 指定的偏移量。
      Returns:
      若偏移位上的值为 1,那么返回true。
    • bitCount

      public static Long bitCount(String key)
      统计对应的bitmap上value为1的数量
      Parameters:
      key - bitmap的key
      Returns:
      value等于1的数量
    • bitCount

      public static Long bitCount(String key, int start, int end)
      统计指定范围中value为1的数量
      Parameters:
      key - bitMap中的key
      start - 该参数的单位是byte(1byte=8bit),setBit(key,7,true);进行存储时,单位是bit。那么只需要统计[0,1]便可以统计到上述set的值。
      end - 该参数的单位是byte。
      Returns:
      在指定范围[start*8,end*8]内所有value=1的数量
    • bitOp

      public static Long bitOp(org.springframework.data.redis.connection.RedisStringCommands.BitOperation op, String saveKey, String... destKey)
      对一个或多个保存二进制的字符串key进行元操作,并将结果保存到saveKey上。

      bitop and saveKey key [key...],对一个或多个key逻辑并,结果保存到saveKey。 bitop or saveKey key [key...],对一个或多个key逻辑或,结果保存到saveKey。 bitop xor saveKey key [key...],对一个或多个key逻辑异或,结果保存到saveKey。 bitop xor saveKey key,对一个或多个key逻辑非,结果保存到saveKey。

      Parameters:
      op - 元操作类型;
      saveKey - 元操作后将结果保存到saveKey所在的结构中。
      destKey - 需要进行元操作的类型。
      Returns:
      1:返回元操作值。
    • bitOpResult

      public static Long bitOpResult(org.springframework.data.redis.connection.RedisStringCommands.BitOperation op, String saveKey, String... destKey)
      对一个或多个保存二进制的字符串key进行元操作,并将结果保存到saveKey上,并返回统计之后的结果。
      Parameters:
      op - 元操作类型;
      saveKey - 元操作后将结果保存到saveKey所在的结构中。
      destKey - 需要进行元操作的类型。
      Returns:
      返回saveKey结构上value=1的所有数量值。
    • setStringRedisTemplate

      @Autowired @Qualifier("stringRedisTemplate") public void setStringRedisTemplate(org.springframework.data.redis.core.StringRedisTemplate stringRedisTemplate)