Redis-新数据类型-Bitmaps
1,简介
现代计算机使用二进制(位)作为信息的基本单位,1字节等于8位,
合理的使用操作位能够有效的提高内存的使用率和开发效率:
Redis提供了 Bitmaps 这个“数据类型” 可以实现对位的操作:
1)Bitmaps 本身不是一种数据类型,实际上他就是字符串(key-value)但是它可以对字符串的位进行操作
2)Bitmaps 单独提供了一套指令,所以在 Redis 中使用Bitmaps 和使用字符串的方法不相同,可以把 Bitmaps 想象成以位为单位的数组,
数组的每个1单元只能储存0和1,数组的下标在 Bitmaps 中叫偏移量
2,命令
setbit <key> <offset> <value> 设置Bitmaps中某个偏移量的值(0或1,offset偏移量从0开始)
例如:储存某个用户是否浏览了某篇文章:setbit sub:10284558 1 0
当偏移量较大时,执行时间会比较慢
getbit <key> <offset> 获取Bitmaps 某个偏移量的值
bitcount <key> [start end] 统计字符串从 start字节 到 end字节 比特值为1的数量
bitop and(or/xor/not) <destkey> [key...] bitop是一个复合操作,它可以做多个 Bitmaps 的 and(交集) or(并集)not(非) xor(异或) 操作并将结果保存到 destkey 中
实例:
· 2020-11-04日访问网站的用户为:userid=1,2,5,9
setbit unique:users:20201104 1 1
setbit unique:users:20201104 2 1
setbit unique:users:20201104 5 1
setbit unique:users:20201104 9 1
2020-11-03日访问网站的用户为:userid=0,1,4,9
setbit unique:users:20201103 0 1
setbit unique:users:20201103 1 1
setbit unique:users:20201103 4 1
setbit unique:users:20201103 9 1
计算两天都访问过网站的用户数量:
bitop and unique:users:and20201104_03 unique:users:20201103 unique:users:20201104
例子2:
如果网站有1亿用户,每天有5千万用户活跃,用bitmaps比用集合更节省空间
但是,如果每天只有10万活跃用户,用集合类型比用bitmaps更加节省空间
浙公网安备 33010602011771号