Redis位图BitMap

news/2024/9/17 7:49:07/ 标签: redis, 数据库, 缓存

 一、为什么使用位图?

       使用位图能有效实现 用户签到 等行为,用数据库表记录签到,将占用很多存储;但使用 位图BitMap,就能 大大减少存储占用

二、关于位图

       本质上是String类型,最小长度8位(一个字节),位数不够表示则扩容,每次扩容以字节为单位,最大占用内存为512MB,用来操作位

三、操作

引言:由于偏移量offset与数组下标结果一致,这里我就将offset当成二进制数组下标来讲解

1)设置二进制数组中指定下标的值

语法:setbit key offset value
字段描述:
offset:二进制数组中相对于0号位置的偏移量(或者下标)
value:给指定下标设置的值(0或1

设置val 二进制数组中下标为0的位置值为1(设置完后二进制数组为 10000 0000),如:

setbit val 0 1  

2)获取指定下标的值

语法:getbit key offset
字段描述:
offset:二进制数组中相对于0号位置的偏移量(或者下标)

获取val 二进制数组中下标为0位置的值,如:

getbit val 0

3)统计1的数量

语法: bitcount key

4)查询指定值第一次出现的下标

语法:bitpos key value
字段描述:
value:指定的值(0或1

5)多个二进制数组进行位运算

语法:bitop and | or | xor | not destkey key1 key2 ...
作用:将这些key进行位运算(不包含destkey),运算的结果放到destkey中
字段描述:
destkey:存放的位置
key*:所有进行位运算的二进制数组
and | or | xor | not:and,与;or或;xor,异或;not,非

6)取出二进制数组中指定范围的数据转换为十进制返回

语法:bitfield_ro key [get type offset] ...
作用:取出部分二进制数据,如0011 1100,取出0011返回(0011转为十进制为3)
字段描述:
type:第一个位置表示类型:i代表有符号整数(最高位0为正,1为负),u代表无符号整数;后面紧接着取出位的数量;如u5,代表从起始位置取出5位表示无符号整数
offset:起始偏移量(或起始下标)

假如num 的二进制形式为0011 1100,从下标为2的位置,取出4位,作为无符号整数返回(十进制结果为15)

bitfield_ro num get u4 2

7)操作二进制数组中指定范围的数据

语法:bitfield key [get type offset] [set type offset value] [incrby type offset value]
作用:操作部分二进制数据
字段描述:
type:第一个位置表示类型:i代表有符号整数(最高位0为正,1为负),u代表无符号整数;后面紧接着操作位的数量;
offset:起始偏移量(或起始下标)
value:要操作的值,可以是任意值

① bitfield key [get type offset]

作用:获取二进制数组中连续某一部分的数据转换为十进制

假如num 的二进制形式为0011 1100,从下标为2的位置,取出4位,作为无符号整数返回(十进制结果为15)

bitfield num get u4 2

② bitfield key [set type offset value]

作用:将指定部分的二进制数据的十进制形式设置为value,如果位数不够,则取最后几位;

假如num二进制为0011 1100 ,设置下标从1开始,数3位,也就是011,将8(二进制1000)赋值到这三位上,就成了000,那么num将变为0000 1100 ,操作如下:

bitfield num get u4 2

③ bitfield key [incrby type offset value]

作用:将指定部分的二进制数据加上value,保留原先长度个位

假如num二进制为0011 1100 ,那么取出下标2到3位置数据为11,转换为十进制为3,value为10,那么相加的结果就为13(二进制为1101),保留两位为01,用01替换原来的10,那么num的二进制结果为0001 1100,操作如下:

bitfield num incrby  u2 2 10


http://www.ppmy.cn/news/1522035.html

相关文章

k8s API资源对象

API资源对象Deployment 最小的资源是pod,deployment是多个pod的集合(多个副本实现高可用、负载均衡等)。 使用yaml文件来配置、部署资源对象。 Deployment YAML示例: vi ng-deploy.yaml apiVersion: apps/v1 kind: Deployment…

JS设计模式之“分即是合” - 建造者模式

引言 当我们在进行软件编程时,常常会遇到需要创建复杂对象的情况。这些对象可能有多个属性,属性之间存在依赖关系,或需要按照特定的骤来创建。在这种情况下,使用建造者模式(Builder Pattern)可以提供一种活…

给A的平方根矩阵乘高斯随机向量

所以给A的平方根矩阵乘高斯随机向量,目的是得到很多矩阵,这些矩阵的空间平均 A

嵌入式软件--51单片机 DAY 4

一、蜂鸣器 当电流通过线圈时会产生电磁场,电磁场与永磁体相互作用,从而使金属膜产生震动而发声。为使金属膜持续震动,蜂鸣器需要使用震荡电路进行驱动。有些蜂鸣器元件内部自带震荡驱动电路,这种蜂鸣器叫做有源蜂鸣器&#xff0…

网恋照妖镜源码搭建教程

文章目录 前言创建网站1.打开网站设置 配置ssl2.要打开强制HTTPS,用宝塔免费的ssl证书即可,也可以使用其他证书,必须是与域名匹配的3.上传文件至根目录进行解压4.解压后,修改文件 sc.php 里面的内容5.其余探索 前言 前俩年很火的…

第92集《大佛顶首楞严经》

讲义209面 我们在正念真如的过程当中,主要有二种的方法:第一个就是依教起观。就是我们根据本经的语言文字的教法,来生起观照。比方说佛陀告诉我们经常能够回光返照:你从什么地方来?从语言文字的引导当中,念…

4.1 数据分析-excel 基本操作

第四节:数据分析-excel 基本操作 课程目标 学会excel 基本操作 课程内容 数据伪造 产生一份招聘数据 import pandas as pd from faker import Faker import random import numpy as np# 创建一个Faker实例,用于生成假数据,指定中文本地…

【视频讲解】Python贝叶斯卷积神经网络分类胸部X光图像数据集实例

全文链接:https://tecdat.cn/?p37604 分析师:Yuanchun Niu 在人工智能的诸多领域中,分类技术扮演着核心角色,其应用广泛而深远。无论是在金融风险评估、医疗诊断、安全监控还是日常的交互式服务中,有效的分类算法都是…

PHP轻量级高性能HTTP服务框架 - webman

摘要 webman 是一款基于 workerman 开发的高性能 HTTP 服务框架。webman 用于替代传统的 php-fpm 架构,提供超高性能可扩展的 HTTP 服务。你可以用 webman 开发网站,也可以开发 HTTP 接口或者微服务。 除此之外,webman 还支持自定义进程&am…

计算机基础知识-2

x86架构的寄存器 AT&T汇编和Intel汇编的区别 每取出完一条指令,PC会自动+"1",指向下一条要被执行的指令。这里的1是指下一条指令,但是指令本身可能占用多个字节,所以地址可能不是以1叠加 当前执行的是10…

实现简单聊天

管道通信 目的: 实现 xxz 与 zy 之间的通讯聊天 功能: 同一网络下进行的模拟通讯实现 缺点:没有涉及到网络的通信,只是简单的进程之间模拟的通信 采用到的技术点: 1 有名管道 优点: 在文件系统中作为一…

【自然语言处理】调用NLTK数据失败‘wordnet‘和‘punkt‘不存在[Errno 11004]问题解决

wordnet报错 明明已经按照了nltk包&#xff0c;但使用 WordNet 语料库时依然报错提示数据不存&#xff0c;依据以下代码在python中下载wordnet仍然报错&#xff1a; import nltk nltk.download(wordnet)运行后始终提示&#xff1a; [nltk_data] Error loading wordnet: <…

大白话【12】网络虚拟化

1.VMware网络三种工作模式 1.桥接网络&#xff1a;虚拟一个交换机在内存里面&#xff08;ovs&#xff09;&#xff0c;叫vmnet0如果你的物理机可以上外网&#xff0c;那么虚拟机也可以上外网2.NAT网络&#xff1a;将内网转换成外网叫vmnet8桥接和NAT既然都可以上外网&#xff…

PCDN 技术如何保障网络安全(壹)

在当今数字化时代&#xff0c;网络安全成为了至关重要的问题。PCDN&#xff08;Peer-to-Peer Content Delivery Network&#xff09;技术在提升内容分发效率的同时&#xff0c;也采取了一系列措施来保障网络安全。 一、加密传输与数据保护 PCDN 技术采用先进的加密算法对传输中…

[linux 驱动]platform总线设备驱动详解与实战

目录 1 描述 2 结构体 2.1 bus_type 2.2 platform_bus_type 2.2.1 platform_match 2.2.2 platform_uevent 2.2.3 platform_dma_configure 2.2.4 platform_dev_pm_ops 2.3 platform_driver 2.4 platform_device 3 platform注册 3.1 platform_driver_register 3.1.1 …

【网络安全 | 甲方建设】开发、测试、部署关键词详解

原创文章,不得转载。 文章目录 需求与开发原生需求重构新增服务调用测试与覆盖率单元测试增量代码单测UT覆盖率CR前覆盖率APP回归测试回归测试自动化冒烟部署与环境Stable环境部署待部署服务名称代码分支待部署代码分支PR链接灰度发布蓝绿发布Canary发布热修复(Hotfix)Mock环…

2024年高教杯国赛(B题)数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

828华为云征文 | Flexus X实例CPU、内存及磁盘性能实测与分析

引言 随着云计算的普及&#xff0c;企业对于云资源的需求日益增加&#xff0c;而选择一款性能强劲、稳定性高的云实例成为了关键。华为云Flexus X实例作为华为云最新推出的高性能实例&#xff0c;旨在为用户提供更强的计算能力和更高的网络带宽支持。最近华为云828 B2B企业节正…

docker registry 仓库加密

docker registry 仓库加密 1、背景 ​ 公司一直用的镜像仓库是docker registry&#xff0c;但是有个安全问题&#xff0c;就是仓库从web ui的浏览到镜像的拉取都是可以直接使用的&#xff0c;还是放到了公网上&#xff0c;只需要知道你的域名那就是畅通无阻了&#xff0c;可以…

Python 数据分析— Pandas 基本操作(上)

文章目录 学习内容&#xff1a;一、Series 创建及操作二、DataFram 的创建与操作三、Pandas 的读写操作四、选择指定行列数据 学习内容&#xff1a; 一、Series 创建及操作 ** Series : Pandas 的一种数据结构形式&#xff0c;可理解为含有索引的一维数组。** **&#xff08;…