代码编织梦想

①. 常见的四种统计

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

  • ②. 排序统计:如抖音视频最新评论留言的场景,请你设计一个展现列表。考察你的数据结构和设计思路 - 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
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TZ845195485/article/details/126919966

redis系列,bitmap 命令全解析以及源码赏析-爱代码爱编程

文章目录 本人 github 地址前言跟bitmap相关的命令setbit源码分析bitcount源码分析怎样求一个二进制串里面有多少个1bitmap使用场景总结 本人 github 地址 github 地址 里面有注释好的代码,下载下来可以方便阅读。 前言 由于这周工作关系,没有太多事件阅读太多源码,但是项目常常提到一些用到bitmap

redispython源文件_Python中使用Redis详解-爱代码爱编程

作者:Zarten 简介: 互联网一线工作者,尊重原创并欢迎评论留言指出不足之处,也希望多些关注和点赞是给作者最好的鼓励 ! 介绍 Redis是一个开源的基于内存也可持久化的Key-Value数据库,采用ANSI C语言编写。它拥有丰富的数据结构,拥有事务功能,保证命令的原子性。由于是内存数据库,读写非常高速,可达10w/s的评率,所以一般应用于数据变化快

redis get自动获取数据php,redis 使用 get 命令读取 bitmap 类型的数据-爱代码爱编程

在签到统计场景中,可以使用 bitmap 数据类型高效的存储签到数据,但 getbit 命令只能获取某一位值,就无法最优的满足部分业务场景了。 比如我们按年去存储一个用户的签到情况,365 天,只需要 365 / 8 ≈ 46 Byte,1KW 用户量一年也只需要 44 MB 就足够了。 setbit sign:uid:year 0 1 #第1天

Redis新类型bitmap-爱代码爱编程

常见的四种统计 聚合统计: 统计多个集合元素的聚合结果,就是交差并等集合统计 交并差集和聚合函数的应用 排序统计: 抖音视频最新评论留言的场景,请你设计一个展现列表。 考察你的数据结构和设计思路? 设计案例和回答思路: 以抖音vcr最新的留言评价为案例,所有评论需要两个功能,按照时间排序+分页显示 能够排序+分页显示的redis数据结构是什么合适

Redis 中 BitMap 的使用场景-爱代码爱编程

BitMap BitMap 原本的含义是用一个比特位来映射某个元素的状态。由于一个比特位只能表示 0 和 1 两种状态,所以 BitMap 能映射的状态有限,但是使用比特位的优势是能大量的节省内存空间。 在 Redis 中,可以把 Bitmaps 想象成一个以比特位为单位的数组,数组的每个单元只能存储0和1,数组的下标在 Bitmaps 中叫做偏移量。

Redis概述&下载与安装&使用redis-爱代码爱编程

一、Redis概述 1.1 互联网架构的演变历程 第一阶段 [ 1] 数据访问量不大,简单的架构即可搞定! 第二阶段 [ 1] 数据访问量大,使用缓存技术来缓解数据库的压力。 [ 2] 不同的业务访问不同的数据库 第三阶段 [ 1] 主从读写分离。 [ 2] 之前的缓存确实能够缓解数据库的压力,但是写和读都集中在一个数据库上,压力又

Redis笔记_2_Redis数据类型-爱代码爱编程

!说明:近6天学了一下Redis,笔记分享,mark,mark! 一、数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。1、String 最基本的类型,一个key对应一个valueString类型是二进制安全的。即Redis可以包含任何数据,如

redis常见命令,位图bitmap、redis缓存、redis集群搭建-爱代码爱编程

一、概念 可以用做缓存kv数据 Redis key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值 Key取值原则: 键值不需要太长,消耗内存,且在数据中查找这类键值的计算成本较高 键值不宜过短,可读性较差 字符串是一种最基本的Redis值类型。Red

4、redis新类型-bitmap-爱代码爱编程

1、先看看大厂真实面试需求+面试反馈 面试题一: 手机APP中的每天的用户登录信息:1天对应1系列用户ID或移动设备ID;电商网站上商品的用户评论列表:1商品对应了1系列的评论用户在手机APP上的签到打卡信息:1天对应1系列用户的签到记录;应用网站上的网页访问信息:1个网页对应1系列的访问点击面试题二: 记录对集合中的数据进行统计在移动应用中,需要统

redis3_redis数据类型-爱代码爱编程

写在前面 个人博客网址:https://jiong952.github.io/ 个人github网址:https://github.com/jiong952 五大数据类型 redis的命令操作大全 http://www.redis.cn/commands.html redis键-key操作 keys *查看当前库所有key (匹配:keys *

redis:位图setbit、getbit、bitcount、bitpos、bitop命令介绍_glenshappy的博客-爱代码爱编程

SETBIT SETBIT key offset value 1 可用版本:>= 2.2.0 时间复杂度: O(1) 1 2 对键key对应的位图(其实是字符串,只不过该字符串的每一位都是字符0或者字符1,下面都叫它位图),设置或清除指定偏移量上的位(bit),位的设置或清除取决于value的值,它可以是0,也可以是1。 演示 当键key不存在时

归并排序(mergesort)_leeplace的博客-爱代码爱编程

文章目录 思路分析两个有序数组的归并一个无序数组的拆分和归并 代码实现递归实现非递归版本 复杂度和稳定性空间复杂度时间复杂度稳定性 思路分析 两个有序数组的归并 现在给你两

加密项目是否采用dao模式 首先考量这8个因素-爱代码爱编程

随着越来越多公司寻求管理和组织战略创新,我们看到市场对 DAO  的兴趣日益增长,同时也对人们的数字生活产生了巨大影响。不过,并不是每个项目都适合采用 DAO 模式,在做出正确选择之前,你需要考虑以下 8 个要点: 1、集中服务和大规模项目不建议用 DAO 对于 Web3 初创公司来说,DAO 是一种有吸引力的传统企业管理模式替代方法,但如果你的项目规

redis 如何使用 bitmap_redis bitmap-爱代码爱编程

1. Bitmap 是什么 Bitmap(也称为位数组或者位向量等)是一种实现对位的操作的'数据结构',在数据结构加引号主要因为: Bitmap 本身不是一种数据结构,底层实际上是字符串,可以借助字符串进行位操作。 Bitmap 单独提供了一套命令,所以与使用字符串的方法不太相同。可以把 Bitmaps 想象成一个以位为单位的数组,数组的每个单元只