@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的值。
| 构造器和说明 |
|---|
RedisBitMapUtils() |
| 限定符和类型 | 方法和说明 |
|---|---|
static Long |
bitCount(String key)
统计对应的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) |
@Autowired @Qualifier(value="stringRedisTemplate") public void setStringRedisTemplate(org.springframework.data.redis.core.StringRedisTemplate stringRedisTemplate)
public static Boolean setBit(String key, String param, boolean value)
key - bitmap数据结构的keyparam - 要设置偏移的key,该key会经过hash运算。value - true:即该位设置为1,否则设置为0public static boolean getBit(String key, String param)
key - bitmap结构的keyparam - 要移除偏移的key,该key会经过hash运算。public static Boolean setBit(String key, Long offset, boolean value)
key - bitmap结构的keyoffset - 指定的偏移量。value - true:即该位设置为1,否则设置为0public static Boolean getBit(String key, long offset)
key - bitmap结构的keyoffset - 指定的偏移量。public static Long bitCount(String key)
key - bitmap的keypublic static Long bitCount(String key, int start, int end)
key - bitMap中的keystart - 该参数的单位是byte(1byte=8bit),setBit(key,7,true);进行存储时,单位是bit。那么只需要统计[0,1]便可以统计到上述set的值。end - 该参数的单位是byte。public static Long bitOp(org.springframework.data.redis.connection.RedisStringCommands.BitOperation op, String saveKey, String... destKey)
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。
op - 元操作类型;saveKey - 元操作后将结果保存到saveKey所在的结构中。destKey - 需要进行元操作的类型。public static Long bitOpResult(org.springframework.data.redis.connection.RedisStringCommands.BitOperation op, String saveKey, String... destKey)
op - 元操作类型;saveKey - 元操作后将结果保存到saveKey所在的结构中。destKey - 需要进行元操作的类型。Copyright © 2023 Dromara. All rights reserved.