当前位置: 首页 > news >正文

Redis之bitmap类型解读

目录

基本介绍

基本命令 

Setbit 

Getbit 

BITCOUNT 

应用场景

统计当日活跃用户

用户签到

bitmap - Redis布隆过滤器 (应对缓存穿透问题)


基本介绍

Redis 的位图(bitmap)是由多个二进制位组成的数组,只有两种状态,0和1, 数组中的每个二进制位都有与之对应的偏移量(从 0 开始),通过这些偏移量可以对位图中指定的一个或多个二进制位进行操作。

可以把 Bitmap 想象成一个以位为单位的数组,数组的每个单元只能存储 0 和 1,数组的下标在 Bitmap 中叫做偏移量 offset,bitmap默认值都为0.

 BitMap底层实际上使用字符串来存储,由于 Redis 中字符串的最大长度是 512 MB字节,所以 BitMap 的偏移量 offset 值也是有上限的,其最大值是:8 * 1024 * 1024 * 512 = 2^32(4G)。

BitMap 的基本原理就是用一个 bit 来标记某个元素对应的 Value,而 Key 即是该元素。由于采用一 个bit 来存储一个数据,因此可以大大的节省空间。

计算机分配给内存的最小单元是bit,1Byte=8bit, 1个整数类型为4Byte=32bit。

基本命令 

常用命令作用
1、getbit key offset用于获取Redis中指定key对应的值,中对应offset的bit
2、setbit key key offset value用于修改指定key对应的值,中对应offset的bit
3、 bitcount key [start end]用于统计字符串被设置为1的bit数
4、bitop and/or/xor/not destkey key [key …]用于对多个key求逻辑与/逻辑或/逻辑异或/逻辑非

Setbit 

Redis Setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

redis> SETBIT bit 10086 1
(integer) 0redis> GETBIT bit 10086
(integer) 1redis> GETBIT bit 100   # bit 默认被初始化为 0
(integer) 0

返回值:指定偏移量原来储存的位。

Getbit 

Redis Getbit 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

# 对不存在的 key 或者不存在的 offset 进行 GETBIT, 返回 0redis> EXISTS bit
(integer) 0redis> GETBIT bit 10086
(integer) 0# 对已存在的 offset 进行 GETBITredis> SETBIT bit 10086 1
(integer) 0redis> GETBIT bit

返回值:字符串值指定偏移量上的位(bit)。当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0 。

BITCOUNT 

统计指定位区间上,值为 1 的个数。语法格式如下:

BITCOUNT key [start end]

127.0.0.1:6379> BITCOUNT user:1(integer) 8

只需指定 start 和 end 参数,即可仅对特定字节进行计数。start 和 end 参数和 GETRANGE 命令的参数类似,都可以使用负数,比如 -1 表示倒数第一个位, -2 表示倒数第二个位。. 

应用场景

统计当日活跃用户

每日活跃统计创建一个bitmap键,当用户活跃了根据用户id的偏移量来设置对应的位为1

用户签到

每个用户创建一个位图的键,以某一天为基础,之后的天数距离这一天的天数为偏移量,如果用户点击了签到,则设置对用的偏移位为1。

bitmap - Redis布隆过滤器 (应对缓存穿透问题)

举例:比如爬虫服务器在爬取电商网站的商品信息时,首先经过缓存,如果缓存查不到,再去数据库获取信息,因为爬虫的效率很高,且sku很有可能是不存在或者已下架的,就会造成缓存穿透,大量请求被发送到数据库,导致服务器受到影响。

此时,可以在缓存层之前,添加一个布隆过滤器,布隆 过滤器看作是一个bitmap,sku作为offset值,如果商品真实存在,bit值设为1。首先将商品数据初始化,当有请求时,通过getbit判断sku是否有效。如果布隆过滤器认为商品不存在,就拒绝访问,这样就可以保护存储层。

相关文章:

Redis之bitmap类型解读

目录 基本介绍 基本命令 Setbit Getbit BITCOUNT 应用场景 统计当日活跃用户 用户签到 bitmap - Redis布隆过滤器 (应对缓存穿透问题) 基本介绍 Redis 的位图(bitmap)是由多个二进制位组成的数组,只有两…...

stm32之10.系统定时器

delay_s()延时秒 delay_ms()毫秒*1000 delay_us()微秒*1000000 微秒定时器代码 void delay_us(uint32_t n) { SysTick->CTRL 0; // Disable SysTick,关闭系统定时器 SysTick->LOAD SystemCoreClock/1000000*n-1; // 就是nus SysTick->LOAD Sys…...

PyTorch安装教程:从头开始配置PyTorch环境

PyTorch是一个开源的机器学习框架,广泛用于深度学习任务。要开始使用PyTorch,您需要在计算机上正确配置PyTorch环境。本文将为您提供一步步的指南,帮助您成功安装和配置PyTorch。 第一部分:安装Python和相关工具 第一步&#xf…...

Docker拉取并配置Grafana

Linux下安装Docker请参考:Linux安装Docker 安装准备 新建挂载目录 /opt/grafana/data目录,准备用来挂载放置grafana的数据 /opt/grafana/plugins目录,准备用来放置grafana的插件 /opt/grafana/config目录,准备用来挂载放置graf…...

Vue+Axios搭建二次元动态登录页面(mp4视频格式)

最近想做一个前端登录页面,背景好看的,格式中规中矩的,这么难?我自己创一个吧! 效果图如下: 源码可以参考我的github,复制源码即可用:gym02/loginPage_Vue: 使用VueAxios搭建的动态…...

【Kubernetes】K8S到底是什么,最近怎么这么火

前言 kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kub…...

Java爬虫下载网页图片

在Java中&#xff0c;可以使用HttpURLConnection&#xff0c;Jsoup等库来实现网页爬取和图片下载。下面是一个基本的例子&#xff1a; 首先&#xff0c;需要添加Jsoup库到你的项目中。如果你使用Maven&#xff0c;可以在你的pom.xml文件中添加以下依赖&#xff1a; xml <…...

C语言之扫雷游戏实现篇

目录 主函数test.c 菜单函数 选择循环 扫雷游戏实现分析 整体思路 问题1 问题2 问题3 问题4 游戏函数&#xff08;函数调用&#xff09; 创建游戏盘数组mine 创建游戏盘数组show 初始化游戏盘数组InitBoard 展示游戏盘DisplayBoard 游戏盘置雷SetMine 游戏…...

Python面向对象中super用法与MRO机制

Python面向对象中super用法与MRO机制 最近再看trackformer&#xff0c;里面用到了super的用法&#xff0c;记录一下super的用法 class A(object):def __init__(self):print(init A)def fun(self):print(A.fun)print(self)super(A, self).fun()class B(object):def __init__(s…...

高性能网络模式-Reactor

事实上&#xff0c;Reactor 模式也叫Dispatcher模式&#xff0c;即I/O 多路复⽤监听事件&#xff0c;收到事件后&#xff0c;根据事件类型分配&#xff08;Dispatch&#xff09;给某个进程/线程。Reactor 模式也是一种非阻塞同步网络模式。 Reactor 模式主要由 Reactor部分和处…...

gRpc的四种通信方式详细介绍

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

JWT令牌的介绍

目录 一、什么是JWT 二、JWT令牌和Cookie客户端、Session服务端对比 三、特点与注意事项 四、使用场景 优点&#xff1a; 五、结构组成 一、什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种用于在网络应用间传递信息的开放标准&#xff08;RFC 7519&#x…...

C语言入门 Day_9 条件判断

目录 前言&#xff1a; 1.if判断 2.else判断 3.易错点 4.思维导图 前言&#xff1a; 我们知道比较运算和逻辑运算都会得到一个布尔型的数据&#xff0c;要么为真&#xff08;true&#xff09;&#xff0c;要么为假&#xff08;false&#xff09;。 今天我们来学习真和假在…...

Nodejs-nrm:快速切换npm源 / npm官方源和其他自定义源之间切换

一、理解 Nodejs nrm Nodejs nrm 是一个管理 npm 源的工具。由于 npm 在国内的速度较慢&#xff0c;很多开发者会使用淘宝的 npm 镜像源&#xff0c;但是也会遇到一些问题&#xff0c;例如某些包在淘宝镜像源中不存在&#xff0c;或者淘宝镜像源本身也会有问题。 Nodejs nrm …...

数据驱动洞察:各种词频分析技术挖掘热点数据

一、引言 随着信息时代的发展&#xff0c;人们的关注点日益复杂多样。社交媒体、新闻网站和论坛等平台上涌现了大量的信息&#xff0c;这使得热点分析成为了解社会热点话题和舆情动向的重要手段。词频统计是热点分析的基础&#xff0c;本文将分别介绍基于ElasticSearch、基于S…...

ES6-简介、语法

ES6 ES6简介 ​ ECMAScript 6&#xff08;简称ES6&#xff09;是于2015年6月正式发布的JavaScript语言的标准&#xff0c;正式名为ECMAScript 2015&#xff08;ES2015&#xff09;。它的目标是使得JavaScript语言可以用来编写复杂的大型应用程序&#xff0c;成为企业级开发语…...

诚迈科技子公司智达诚远与Unity中国达成合作,打造智能座舱新时代

2023 年 8 月 23 日&#xff0c;全球领先的实时 3D 引擎 Unity 在华合资公司 Unity 中国举办发布会&#xff0c;正式对外发布 Unity 引擎中国版——团结引擎&#xff0c;并带来专为次世代汽车智能座舱打造的团结引擎车机版。发布会上&#xff0c;诚迈科技副总裁、诚迈科技子公司…...

算法与数据结构(十)--图的入门

一.图的定义和分类 定义&#xff1a;图是由一组顶点和一组能够将两个顶点连接的边组成的。 特殊的图&#xff1a; 1.自环&#xff1a;即一条连接一个顶点和其自身的边; 2.平行边&#xff1a;连接同一对顶点的两条边&#xff1b; 图的分类&#xff1a; 按照连接两个顶点的边的…...

【Go 基础篇】Go语言 init函数详解:包的初始化与应用

介绍 在Go语言中&#xff0c;init() 函数是一种特殊的函数&#xff0c;用于在包被导入时执行一次性的初始化操作。init() 函数不需要手动调用&#xff0c;而是在包被导入时自动执行。这使得我们可以在包导入时完成一些必要的初始化工作&#xff0c;确保包的使用具有正确的环境…...

wazuh环境配置及漏洞复现

目录 一、wazuh配置 1进入官网下载OVA启动软件 2.虚拟机OVA安装 二、wazuh案例复现 1.wazuh初体验 2.这里我们以SQL注入为例&#xff0c;在我们的代理服务器上进行SQL注入&#xff0c;看wazuh如何检测和响应 一、wazuh配置 1进入官网下载OVA启动软件 Virtual Machine (O…...

cobalt家谱研究者助手:家族历史与档案管理方案

cobalt家谱研究者助手&#xff1a;家族历史与档案管理方案 引言&#xff1a;家谱研究的数字时代痛点与解决方案 你是否还在为散乱的家族史料整理而困扰&#xff1f;是否经历过珍贵的口述历史随时间流逝而湮灭&#xff1f;cobalt家谱研究者助手&#xff08;家族历史与档案管理方…...

XGBoost+SHAP实战:如何让机器学习模型‘看懂’地图?

XGBoostSHAP实战&#xff1a;如何让机器学习模型‘看懂’地图&#xff1f; 当机器学习遇上地理空间数据&#xff0c;我们常常面临一个核心矛盾&#xff1a;模型预测精度与人类可解释性之间的博弈。传统GIS分析方法如空间滞后模型&#xff08;SLM&#xff09;或地理加权回归&…...

英雄联盟智能助手完全指南:3分钟掌握LCU API自动化工具

英雄联盟智能助手完全指南&#xff1a;3分钟掌握LCU API自动化工具 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟…...

百度后端开发(Java)面试题精选:10道高频考题+答案解析

百度简介 百度是中国领先的互联网公司,以搜索引擎起家,现已发展成为涵盖人工智能、云计算、自动驾驶等多个领域的科技巨头。百度技术栈以Java为主,Spring生态为核心,在分布式系统、大数据处理、AI工程化方面有深厚积累。面试风格注重基础原理与工程实践结合,常考JVM调优、…...

自动驾驶避障实战:人工势场法的核心原理与MATLAB仿真

1. 人工势场法基础概念 第一次接触人工势场法是在研究生阶段的机器人学课程上&#xff0c;当时教授用了一个非常形象的比喻&#xff1a;想象你手里拿着一块磁铁&#xff0c;目标点是一块异性磁极的磁铁&#xff0c;障碍物则是同性磁极的磁铁。这个简单的物理现象&#xff0c;就…...

别再只用LSTM了!用XGBoost做电力负荷预测,从特征工程到模型部署的完整实战(附Python代码)

电力负荷预测实战&#xff1a;XGBoost如何超越LSTM的五大技术突破 在能源管理领域&#xff0c;准确预测电力负荷一直是行业痛点。当大多数团队还在使用LSTM等深度学习模型时&#xff0c;一个令人惊讶的事实正在发生&#xff1a;经过精心调优的XGBoost模型在多个工业场景中表现优…...

基于Qwen-2.5-VL与RAG的智能客服系统实战:从微调优化到生产部署

最近在做一个智能客服项目&#xff0c;客户那边对回答的准确性和时效性要求特别高。传统的规则引擎早就力不从心了&#xff0c;而直接用通用大模型&#xff0c;又经常“一本正经地胡说八道”&#xff0c;或者回答一些过时的信息。经过一番折腾&#xff0c;我们最终选择了 Qwen-…...

《热江手游》千人跨服战 + 自由交易,老玩家直呼真香!

《热江手游》手游来袭&#xff0c;正版授权 1:1 复刻经典&#xff0c;剥离冗余氪金系统&#xff0c;回归 MMO 最本真的乐趣 —— 无 VIP 碾压、无强制付费&#xff0c;所有极品道具全靠打&#xff0c;零氪玩家也能凭实力登顶江湖&#xff01;​ 无论是泫勃派、南林等标志性地图…...

DA-TransUNet进阶:双注意力机制如何重塑医学图像分割的精度与效率

1. DA-TransUNet为何能成为医学图像分割的新标杆 第一次看到CT扫描影像时&#xff0c;我被那些模糊的病灶边界难住了——就像在雾天里找路标&#xff0c;明明知道目标就在那里&#xff0c;却总是划不准轮廓。这正是传统U-Net和Transformer在医学图像分割中的共同困境&#xff1…...

Go网络编程nethttp包解析

Go语言凭借其简洁高效的特性&#xff0c;已成为现代网络编程的热门选择。其中&#xff0c;标准库中的net/http包为开发者提供了强大的HTTP服务端和客户端功能&#xff0c;极大简化了Web开发流程。本文将深入解析net/http包的核心特性&#xff0c;帮助开发者掌握构建高性能Web服…...