REDIS08_bitmap的概述用途setbitgetbitbigcountbittopstrlen命令使用

Posted 所得皆惊喜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了REDIS08_bitmap的概述用途setbitgetbitbigcountbittopstrlen命令使用相关的知识,希望对你有一定的参考价值。

文章目录

①. 常见的四种统计

  • ①. 聚合统计
    统计多个集合元素的聚合结果,就是前面讲解过的交差并等集合统计
    交并差集和聚合函数的应用

  • ②. 排序统计:如抖音视频最新评论留言的场景,请你设计一个展现列表。考察你的数据结构和设计思路 - list、zset

  • ③. 二值统计:集合元素的取值就只有0和1两种。在钉钉上班签到打卡的场景中,我们只用记录有签到(1)或没签到(0) - bitmap

  • ④. 基数统计:指统计⼀个集合中不重复的元素个数 - hyperloglog

②. bitmap位图 - 概述

  • ①. Bit array我们可以称之为位图,由许许多多的小格子组成,每一个小格子里面只能放1或者0,用它判断Y/N状态说的专业,每一个个小格子就是一个个的bit

  • ②.用String类型作为底层数据结构实现的一种统计二值状态的数据类型位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们可以称之为一个索引或者位格)。Bitmap支持的最大位数是2^32 位,它可以极大的节约存储空间,使用512M内存就可以存储多大42.9亿的字节信息(2^32 = 4294967296)
    512M = 4294967296 / 8 /1024 /1024

  • ③. 由0和1状态表现的二进制位的bit数组

③. bitmap - 作用

  • ①. 用户是否登陆过Y、N,比如京东每日签到送京豆

  • ②. 电影、广告是否被点击播放过

  • ③. 钉钉打卡上下班,签到统计

  • ④. 统计指定用户一年之中的登陆天数

  • ⑤. 某用户按照一年365天,哪几天登陆过?哪几天没有登陆?全年中登录的天数共计多少?

④. 基本命令 - setbit getbit

  • ①. 基本命令汇总
命令作用时间复杂度
setbit key offset val给指定key的值的第offset赋值valO(1)
getbit key offset获取指定key的第offset位O(1)
bitcount key start end返回指定key中[start,end]中为去的数量O(n)
bitop operation destkey key对不同的二进制存储数据进行位运算(AND、OR、NOT、XOR)O(n)
  • ②. setbit key offset value(setbit 键 偏移位 只能零或者1)
    Bitmap的偏移量是从零开始算的

  • ③. getbit key offset

  • ④. setbit和getbit案例说明:按照天、按照年

  • ⑤. bitmap的底层编码说明,get命令操作如何

  1. 实质是二进制的ascii编码对应
  2. redis里用type命令看看bitmap实质是什么类型?String类型
  • ⑥. strlen:统计字节数占用多少
    不是字符串长度而是占据几个字节,超过8位后自己按照8位一组一byte再扩容

  • ⑦. bitcount
    全部键里面含有1的有多少个?
    一年365天,全年天天登陆占用多少字节

  • ⑧. bitop
    连续2天都签到的用户
    加入某个网站或者系统,它的用户有1000W,做个用户id和位置的映射
    比如0号位对应用户id:uid-092iok-lkj
    比如1号位对应用户id:uid-7388c-xxx

redis> SETBIT bits-1 0 1        # bits-1 = 1001
(integer) 0

redis> SETBIT bits-1 3 1
(integer) 0
 
redis> SETBIT bits-2 0 1        # bits-2 = 1101
(integer) 0
 
redis> SETBIT bits-2 1 1
(integer) 0
 
redis> SETBIT bits-2 3 1
(integer) 0
 
redis> BITOP AND and-result bits-1 bits-2
(integer) 1
 
redis> GETBIT and-result 0      # and-result = 1001
(integer) 1
 
redis> GETBIT and-result 1
(integer) 0
 
redis> GETBIT and-result 2
(integer) 0

redis> GETBIT and-result 3
(integer) 1

以上是关于REDIS08_bitmap的概述用途setbitgetbitbigcountbittopstrlen命令使用的主要内容,如果未能解决你的问题,请参考以下文章

REDIS08_bitmap的概述用途setbitgetbitbigcountbittopstrlen命令使用

REDIS04_bitmap的概述用途setbitgetbitbigcountbittopstrlen命令使用

REDIS04_bitmap的概述用途setbitgetbitbigcountbittopstrlen命令使用

利用redis setbit和bitmap统计用户数

Redis系列第四篇之Bitmap

redis中setbit bitcount命令详解