redis bitmap

1.概述

Redis从2.2.0版本开始新增了setbit,getbit,bitcount,bitop等几个bitmap相关命令。虽然是新命令,但是并没有新增新的数据类型,因为setbit等命令只不过是在set上的扩展。通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。Bitmaps 本身不是一种数据结构,实际上它就是字符串(key 对应的 value 最后的一串二进制),但是它可以对字符串的位进行操作。 Bitmaps 单独提供了一套命令,所以在 Redis 中使用 Bitmaps 和使用字符串的方法不太相同。可以把 Bitmaps 想象成一个以 位 为单位的数组,数组的每个单元只能存储 0 和 1,数组的下标在Bitmaps中叫做偏移量。

2.常见命令

setbit :设置或者清空key的value(字符串)在offset处的bit值(只能只0或者1)。

getbit:  获取偏移量未offset的值

bitcount:计算给定字符串中,被设置为 1 的比特位的数量,一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。start 和 end 参数的设置和 GETRANGE 命令类似,都可以使用负数值:比如 -1 表示最后一个位,而 -2 表示倒数第二个位,以此类推。不存在的 key 被当成是空字符串来处理,因此对一个不存在的 key 进行 BITCOUNT 操作,结果为 0 。

bitop:对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到另外一个字符串

3.命令使用

127.0.0.1:6379> setbit sign_0 0 1 //sign_0 第零位设置1
(integer) 0
127.0.0.1:6379> setbit sign_0 1 1
(integer) 0
127.0.0.1:6379> setbit sign_1 0 0
(integer) 1
127.0.0.1:6379> setbit sign_2 0 1
(integer) 1
127.0.0.1:6379> getbit sign_0 1
(integer) 1
127.0.0.1:6379> bitcount sign_0 0 -1 //计算sign_0 所有1的个数
(integer) 2
//对sign_0 sign_1 sign_2求逻辑异或,并将结果保存到 dest 
127.0.0.1:6379> bitop xor dest sign_0 sign_1 sign_2
(integer) 1
//对sign_0,sign_1,sign_2 求逻辑并,并将结果保存到dest
127.0.0.1:6379> bitop and dest sign_1 sign_2
(integer) 1
对sign_0 sign_1 sign_2 求逻辑或,并将结果保存到 dest 
127.0.0.1:6379> bitop or dest sign_1 sign_2
(integer) 1
//对sign_1 求逻辑非,并将结果保存到 dest
127.0.0.1:6379> bitop not dest sign_1
(integer) 1

4.使用场景

    1.统计活跃用户

    2.签到

    3. 布隆过滤器

    4.用户在线状态

5.bitmap使用注意

  bitmap是基于redis的字符串类型的. 而一个字符串类型最多存储512M

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值