【redis】redis位图相关操作

Redis支持位图操作,包括设置或清除位(SETBIT),计算位1的数量(BITCOUNT),查找位位置(BITPOS)以及执行位运算(BITOP)。这些功能在数据存储和处理中提供了高效和节省空间的解决方案,例如在计数、状态跟踪和数据压缩等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis提供了对于位图的位运算的支持,全部命令如下:

127.0.0.1:6379> help @bitmap

  BITCOUNT key [start end [BYTE|BIT]]
  summary: Count set bits in a string
  since: 2.6.0

  BITFIELD key [GET encoding offset|[OVERFLOW WRAP|SAT|FAIL] SET encoding offset value|INCRBY encoding offset increment [GET encoding offset|[OVERFLOW WRAP|SAT|FAIL] SET encoding offset value|INCRBY encoding offset increment ...]]
  summary: Perform arbitrary bitfield integer operations on strings
  since: 3.2.0

  BITFIELD_RO key [GET encoding offset [GET encoding offset ...]]
  summary: Perform arbitrary bitfield integer operations on strings. Read-only variant of BITFIELD
  since: 6.0.0

  BITOP operation destkey key [key ...]
  summary: Perform bitwise operations between strings
  since: 2.6.0

  BITPOS key bit [start [end [BYTE|BIT]]]
  summary: Find first bit set or clear in a string
  since: 2.8.7

  GETBIT key offset
  summary: Returns the bit value at offset in the string value stored at key
  since: 2.2.0

  SETBIT key offset value
  summary: Sets or clears the bit at offset in the string value stored at key
  since: 2.2.0

下面挑一些命令来简述,

setbit

改变指定偏移量的位的值,偏移量的范围为从整个value的所有字节的第0个字节的第0位,到最后一个字节的最有一个比特位

127.0.0.1:6379> help setbit

  SETBIT key offset value
  summary: Sets or clears the bit at offset in the string value stored at key
  since: 2.2.0
  group: bitmap

bitpos

找到指定范围(start-end)字节/比特上,第一个满足参数bit的字节/比特的偏移量

127.0.0.1:6379> help bitpos

  BITPOS key bit [start [end [BYTE|BIT]]]
  summary: Find first bit set or clear in a string
  since: 2.8.7
  group: bitmap

bitcount

统计指定范围(start - end)里为1的字节/比特的个数。

127.0.0.1:6379> help BITCOUNT

  BITCOUNT key [start end [BYTE|BIT]]
  summary: Count set bits in a string
  since: 2.6.0
  group: bitmap

bitop

对两个key对应的value进行位运算,并将结果与destkey作为键值对存储在redis中。

127.0.0.1:6379> help bitop

  BITOP operation destkey key [key ...]
  summary: Perform bitwise operations between strings
  since: 2.6.0
  group: bitmap

下面是示例:

//在第1与第6比特位上设置为1,即0100 0010,在ascii中对应B
127.0.0.1:6379> setbit k1 1 1 
(integer) 0
127.0.0.1:6379> setbit k1 6 1
(integer) 0
127.0.0.1:6379> get k1
"B"
//在第1与第7比特位上设置为1,即0100 0001,在ascii中对应A
127.0.0.1:6379> setbit k2 1 1
(integer) 0
127.0.0.1:6379> setbit k2 7 1
(integer) 0
127.0.0.1:6379> get k2
"A"
//k1与k2对应的value进行与运算,结果作为"andkey"的value
//0100 0001&0100 0010,结果为0100 0000,在ascii中对应@
127.0.0.1:6379> bitop and andkey k1 k2
(integer) 1
127.0.0.1:6379> get andkey
"@"
//k1与k2对应的value进行或运算,结果作为"orkey"的value
//0100 0001 | 0100 0010,结果为0100 0011,在ascii中对应C
127.0.0.1:6379> bitop or orkey k1 k2
(integer) 1
127.0.0.1:6379> get orkey
"C"
//统计orkey的值的0到1比特位上的1的个数。0100 0011,0到1比特位为前2位,只有1个比特位数值为1
127.0.0.1:6379> BITCOUNT orkey 0 1 bit
(integer) 1

位图的优势在于运算最快、同时也很省空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值