01-Redis 特殊数据类型之 BitMap
BitMap
简介
在开发中,可能会遇到这种情况:如需要记录用户一年的打卡情况,打卡了是1,没有打卡是0,如果使用普通的 key/value 存储,则要记录 365 条记录,如果用户量很大,需要的空间也会很大,所以 Redis 提供了 Bitmap 位图这中数据结构, Bitmap 就是通过操作二进制位来进行记录,即为 0 和 1;如果要记录 365 天的打卡情况,使用 Bitmap 表示的形式大概如下:0101000111000111………………………,这样有什么好处呢?当然就是节约内存了,365 天相当于 365 bit,又 1 字节 = 8 bit, 所以相当于使用 46 个字节即可。
BitMap 就是通过一个 bit 位来表示某个元素对应的值或者状态, 其中的 key 就是对应元素本身,实际上底层也是通过对字符串的操作来实现。Redis 从 2.2 版本之后新增了 setbit, getbit, bitcount
等几个 bitmap 相关命令。
常用指令
1、setbit 设置操作
语法:SETBIT key offset value
: 设置 key 的第 offset 位为 value(1 或 0)。
使用 bitmap 来记录上述事例中一周的打卡记录如下所示:
周一:1,周二:0,周三:0,周四:1,周五:1,周六:0,周天:0 (1 为打卡,0 为不打卡)。
1 |
|
2、getbit 获取操作
语法 GETBIT key offset
获取 offset 设置的值,未设置过默认返回 0。
1 |
|
3、bitcount 统计操作
语法:bitcount key [start, end]
统计 key 上位为 1 的个数。
1 |
|
01-Redis 特殊数据类型之 BitMap
https://flepeng.github.io/041-Redis-41-核心概念-01-Redis-特殊数据类型之-BitMap/