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 协议 ,转载请注明蚁点博客出处!