Redis --- 位图
目录
背景
结构
存取方式
统计和查找
背景
开发过程中,会有布尔类型的存储,比如记录一个用户一年365天的签到情况,如果每天都要有一个布尔变量,多个用户,亦或者使用k-v形式,上亿用户的话这个存储量是惊人的。所以Redis的位图应运而生。
一个值占一个位,365天也就是365位,46个字符,也就是一个长点的字符串,大大节省了内存空间。
结构
它并不是一种类似于队列等的特殊的数据结构,内容其实就是普通的字符串,按二进制位数来说,也是就byte数组,可以使用,get,set索引来直接获取或者设置整个位图的内容。
Redis的为数组是自动扩展的,如果偏移位置超出了反胃,会自动扩容。
直接把字符串设置为“hello”,
hello的ASCⅡ码 :>>> bin(ord(' h '))'0b1101000'# 高位 -> 低位>>> bin(ord(' e '))'0b1100101'>>> bin(ord(' l '))'0b1101100'>>> bin(ord(' l '))'0b1101100'>>> bin(ord(' o '))'0b1101111'
注意都是八位。
设置一下一个字符串的位,只需要设置值为1 的位即可
127.0.0.1:6379> setbit s 1 1(integer) 0127.0.0.1:6379> setbit s 2 1(integer) 0127.0.0.1:6379> setbit s 4 1(integer) 0127.0.0.1:6379> setbit s 9 1(integer) 0127.0.0.1:6379> setbit s 10 1(integer) 0127.0.0.1:6379> setbit s 13 1(integer) 0127.0.0.1:6379> setbit s 15 1(integer) 0127.0.0.1:6379> get s"he"
h 只有 1 2 4位是1,e是 9 10 13 15位是1 (两个字符,16位 )直接得到便是一个“he”的字符串
存取方式
以上的例子可以理解为零存整取,还有零存零取,整存零取,零存就是向上面那样一位一位对位置进行设置。整存就是把字符串一次性填充所有位数组,覆盖旧值。
看完位图的结构和存储之后,我们存下来是为了获得统计数量,完成我们所需要的需求。
统计和查找
Redis提供了位图指令:bitcount 和 bitpos,
bitcount用来统计指定位置范围内1的个数,
bitpos 用来查找指定范围内出现的第一个0 或 1
后面参数[start, end] 但是这两个参数都是以8字节位单位的,也就是说,0, 1是指第一个开始第二个字节结束,范围实际上是前十六位。
127.0.0.1:6379> set w helloOK127.0.0.1:6379> bitcount w(integer) 21127.0.0.1:6379> bitcount w 0 0 # 第一个字符中 1 的位数(integer) 3127.0.0.1:6379> bitcount w 0 1 # 前两个字符中 1 的位数(integer) 7127.0.0.1:6379> bitpos w 0 # 第一个 0 位(integer) 0127.0.0.1:6379> bitpos w 1 # 第一个 1 位(integer) 1127.0.0.1:6379> bitpos w 1 1 1 # 从第二个字符算起,第一个 1 位(integer) 9127.0.0.1:6379> bitpos w 1 2 2 # 从第三个字符算起,第一个 1 位(integer) 17
相关文章:
Redis --- 位图
目录 背景 结构 存取方式 统计和查找 背景 开发过程中,会有布尔类型的存储,比如记录一个用户一年365天的签到情况,如果每天都要有一个布尔变量,多个用户,亦或者使用k-v形式,上亿用户的话这个存储量是惊…...

自然语言处理-词向量模型-Word2Vec
通常数据的维度越高,能提供的信息也就越多,从而计算结果的可靠性就更值得信赖 如何来描述语言的特征呢,通常都在词的层面上构建特征,Word2Vec就是要把词转换成向量 假设现在已经拿到一份训练好的词向量,其中每一个词都…...
List知识总结
ArrayList: 1 ArrayList扩容底层用到的是;System.arraycopy. 2 扩容的长度计算;int newCapacity oldCapacity (oldCapacity >> 1);,旧容量 旧容量右移1位,这相当于扩容为原 来容量的(int)3/2. 3 ArrayList<String…...
代码随想录day32
122.买卖股票的最佳时机 II ● 力扣题目链接 ● 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 ● 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 ● 注意:你不能同…...

2.8 PE结构:资源表详细解析
在Windows PE中,资源是指可执行文件中存放的一些固定不变的数据集合,例如图标、对话框、字符串、位图、版本信息等。PE文件中每个资源都会被分配对应的唯一资源ID,以便在运行时能够方便地查找和调用它们。PE文件中的资源都被组织成一个树形结…...
Python数据类型的相互转换
简单数据类型之间的转换 1.字符串如果是数字的,转换为int类型 a "10" a int(a) print(a) 2.数字类型转换成bool类型 a 10 a bool(a) print(a) 只有0才是false,其他值是True 复杂数据类型之间的转换 list:列表 tuple&…...

阿里云云主机免费试用三个月
试用链接如下: 阿里云云产品免费试用 云主机 费用试用三个月,每月750小时 实例规格 1核(vCPU) 2 GiB S6 系列机型 适用搭建网站等场景 网络带宽 1M 公网固定网络带宽 云盘40 GiB 真香!!!!!&…...

OpenHarmony 使用 ArkUI Inspector 分析布局
● 摘要:视图的嵌套层次会影响应用的性能,开发者应该移除多余的嵌套层次,缩短组件刷新耗时。本文会介绍如何使用 ArkUI Inspector 工具分析布局,提示应用响应性能。 ● 关键字:列举本文相关的关键字:OpenH…...

Axes3D绘制3d图不出图解决办法【Python】
运行下面一段代码: import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D#这里设函数为y3x2x_data [1.0,2.0,3.0]y_data [5.0,8.0,11.0]def forward(x): return x * w bdef loss(x,y): y_pred forward(x) …...

Idea中 css 、js 压缩插件会自动生成xxx.min.css、xxx.min.js文件
第一步:下载yuicompressor-2.4.8.jar 下载路径:打开搜索 YUI compressor Maven Repository: Search/Browse/Explore (mvnrepository.com)https://mvnrepository.com/ 找到点击下载即用(如下图) 创建文件夹,放入idea文…...

win11无法加载文件,因为在此系统上禁止运行脚本
问题背景: 最近升级了windows11,文件右键打开终端,默认是使用的powershell。 后面安装npm包依赖的时候,遇到了无法加载文件,因为在此系统上禁止运行脚本。 提示中可以通过访问链接查看:https:\go.micros…...

Spring Boot将声明日志步骤抽离出来做一个复用类
上文Spring Boot日志基础使用 设置日志级别中我们写了个比较基本的日志操作 但也随之产生了一个问题 我们这行代码 能不能不写? 具体说 我们不希望每个需要日志的类都声明一个在这 看着太不美观了 我们最简单方法当然是继承 我们找个目录创建一个类 叫 BaseClass…...
RabbitMQ实现数据库与ElasticSearch的数据同步和分享文件过期处理
🎈 1 参考文档 RabbitMQ实现数据库与ElasticSearch的数据同步 | Hannya。-CSDN 企业级开发项目实战——基于RabbitMQ实现数据库、elasticsearch的数据同步 | 波总说先赚它一个小目标-CSDN SPringBoot集成RabbitMQ实现30秒过期删除功能 | 军大君-CSDN 🔍 …...

PyCharm集成开发环境安装、启动与设置
作为非开发工程师职业,大家多多少少都会对编程有抵触,其实没有必要对Python有太大的“戒心" ,把Python当做你的一个工具就可以了。——扎克伯格 一、Python的定义: Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有…...

算法与设计分析--实验一
蛮力算法的设计与分析(暴力) 这次是某不知名学院开学课程的第一次实验,一共5道题,来自力扣 第一题.216组合总和*力扣题目链接 第一道题是经典的树型回溯 class Solution { public:vector<vector<int>> combinatio…...
ElementUI浅尝辄止28:Dropdown 下拉菜单
将动作或菜单折叠到下拉菜单中。 1.如何使用? 移动到下拉菜单上,展开更多操作。 //通过组件slot来设置下拉触发的元素以及需要通过具名slot为dropdown 来设置下拉菜单。默认情况下,下拉按钮只要hover即可,无需点击也会显示下拉菜…...

jupyter 格式化与快捷键
1、标题: # 一级标题 ## 二级标题 ### 三级标题 2、 加粗文本: **加粗文本** 3、斜体文本: _斜体_ 4、删除线 ~删除线~ 5、高亮文本 高亮文本 6、区块引用 > 我是引用文字 >> 我是第二层 >&g…...

Spring以及SpringBoot/SpringCloud注解
一、SpringBoot/Spring 1、SpringBootApplication 包含Configuration、EnableAutoConfiguration、ComponentScan通常在主类上 其中ComponentScan让Spring Boot扫描到Configuration类并把它加入到程序上下文,如果扫描到有Component Controller Service等这些注解的…...

vim常用操作
一、Esc键 & 命令模式 1.撤销:u 恢复撤销:Ctrl r 2.定位 行首:0 行尾:$ 第7行:7G 3.编辑 下行开始插入: o 删除行:dd 复制3行并粘贴:3yy ---> p 复制单词并粘贴&#…...

Serverless Framework 亚马逊云(AWS)中国地区部署指南
Serverless Framework 亚马逊云(AWS)中国地区部署指南 Serverless Framework 亚马逊云(AWS)中国地区部署指南 前言前置准备 1. 账号的注册2. 全局安装 serverless3. 设置你的系统环境变量4. 设置部署凭证 快速部署一个 hello world 创建入口函数 index.js event 参数context 参…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...