Redis 位图
版权归原作者所有。 本文最后更新于:2023年12月5日 凌晨
位图
平时开发会有一些bool类型的需求
用户签到,一天签到一次,一年365次,当用户数上亿,那就是300多亿数据,需要的存储量惊人
redis就提供了位图数据结构,每天签到记录只占位一个bit,365为=46字节,一个稍长的字符串就可以够用
可以通过 set ge 直接设置整个位图的内容
setbit getbit 设置单个位图的内容(一个位数组)
基本用法
通过编程语言计算hello的二进制值
正常数字 是按照 从右到左,低位到高位
位数组,是从 从左到右,是从低位到高位,
setbit k1 1 1
setbit k1 2 1
setbit k1 4 1
最终得到是: 1101
零存属于 一个位一个位存入, setbit k1 1 1
整取属于 整个都取出来 get k1, 如果是可以解析为一个字符串,则输出字符串,不能解析则输出16进制
整存 是直接存入一个字符串 set k1 hello
零取 是把存入的 一位一位取出 getbit k1 1
统计和查找
bitcount k1 # 获取所有1的数量
bitcount可以查找该用户签到了多少次
bitpos 可以查找用户从第几次开始签到
bitpos k1 1 # 查找当前第一次出现 1 的 位置索引
bitpos k1 0 # 查找当前第一次出现 0 的 位置索引
魔术指令
通过bitfield可以代替管道操作,一次进行多个位操作
bitfield 有三个子指令, get set incrby 都可以进行指定位片段进行读写
最多执行64个连续位,超过64位需要使用多指令
bitfield可以一次性执行多个指令
bitfield k1 get u4 0
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明蚁点博客出处!