Bitmaps本身不是一种数据结构,实际上它就是字符串 ,但是它可以对字符串的位进行操作。
Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。
可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。
常用命令:
设置值 setbit key offset value 获取值 gitbit key offset 获取Bitmaps指定范围值为1的个数(不指定范围默认获取所有) bitcount key [start] [end] start/end代表索引字节,即从第start个字节开始,到第end个字节结束 Bitmaps间的运算 bitop op destkey key [key....] op可以是and/or/not/xor bitop是一个复合操作, 它可以做多个Bitmaps的and(交集)、or(并集)、not(非)、xor(异或) 操作并将结果保存在destkey中。 示例:(取unique:users:2016-04-03和unique:users:2016-04-03的交集,放在unique:users:and:2016-04-04_03中) bitop and unique:users:and:2016-04-04_03 unique:users:2016-04-03 unique:users:2016-04-03 计算Bitmaps中第一个值为targetBit的偏移量 bitpos key targetBit [start] [end]
应用场景
假设网站有1亿用户,每天独立访问的用户有5千万,如果每天用集合类型和Bitmaps分别存储活跃用户可以得到下表。
很明显, 这种情况下使用Bitmaps能节省很多的内存空间, 尤其是随着时间推移节省的内存还是非常可观的,见下表。
但Bitmaps并不是万金油,假如该网站每天的独立访问用户很少,例如只有10万(大量的僵尸用户) ,那么两者的对比如下表所示,很显然,这时候使用Bitmaps就不太合适了,因为基本上大部分位都是0。
关注我的公众号,不定期推送资讯
本文来自博客园,作者:链条君,转载请注明原文链接:https://www.cnblogs.com/MacoLee/p/13999950.html