Redis-新数据类型-Bitmaps

新数据类型-Bitmaps


简介

在计算机中,用二进制(位)作为存储信息的基本单位,1个字节等于8位。

例如 “abc” 字符串是由 3 个字节组成,计算机存储时使用其二进制表示,"abc"分别对应的ASCII码是 97、98、99,对应的二进制是01100001、01100010、01100011,在内存中表示如下:

在这里插入图片描述

合理地使用 位 能够有效地提高内存使用率和开发效率。

Redis提供了Bitmaps这个 “数据结构” 可以实现对位的操作:

  1. Bitmaps 本身不是一种数据结构,实际上它就是字符串(key 对应的 value 就是上图中的一串二进 制),但是它可以对字符串的位进行操作。

  2. Bitmaps 单独提供了一套命令,所以在 Redis 中使用 Bitmaps 和使用字符串的方法不太相同。可 以把 Bitmaps 想象成一个以位为单位的数组,数组的每个单元只能存储 0 和 1,数组的下标在 Bitmaps中叫做偏移量。

    在这里插入图片描述

常用命令

  1. setbit key offset value设置Bitmaps中某个偏移量的值。

    偏移量从0开始,且value值只能为0或1。

    setbit sign 0 1 设置sign的第一位值为1
    setbit sign 1 1 设置sign的第二位值为1
    setbit sign 2 0 设置sign的第三位值为0
    setbit sign 3 1 设置sign的第四位值为1
    
  2. getbit key offset 获取Bitmaps中某个偏移量的值。

    获取key的offset 的值。

    getbit sign 3 获取偏移量为3的值,结果为1
    

    在这里插入图片描述

    如果偏移量未设置值,则也返回0。

    getbit sign 99 获取偏移量为99的值,结果为0
    

    在这里插入图片描述

  3. bitcount key [start end]统计字符串被设置为1的bit数量。一般情况下,给定的整个字符串都会 被进行统计,可以选择通过额外的start和end参数,指定字节组范围内进行统计(包括start和 end),0表示第一个元素,-1表示最后一个元素。

    bitcount sign 获取整个字符串被设置为1的bit数量,结果为3
    

    如:当前存在一个key为k1的bitmaps存储着[00000001,00000001,00000010,00000011],分别对 应[1,1,2,3]。

    setbit num 7 1
    setbit num 15 1
    setbit num 22 1
    setbit num 30 1
    setbit num 31 1
    bitcount num 1 2 统计索引1、2两个字节组中bit=1的数量,即统计00000001,00000010中
    bit=1的数量,结果为2
    bitcount num 1 3 统计索引1、2、3三个字节组中bit=1的数量,即统计
    00000001,00000010,00000011中bit=1的数量,结果为4
    bitcount num 0 -1 统计所有的字节组中bit=1的数量,结果为5
    

    setbit设置或获取的是bit(位)的位置,bitcount计算的是byte(字节)位置。

  4. bitop and/or destkey sourcekey1 sourcekey2……将多个bitmaps通过求交集/并集方式合并成 一个新的bitmaps。

    bitop and k3 k1 k2 通过求交集将k1 k2合并成k3
    bitop or k3 k1 k2 通过求并集将k1 k2合并成k3
    

    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法 知识点整理

线性表 线性表的基本概念 线性表的定义:线性表是一个具有相同特性的数据元素的有限序列。 相同特性:所有元素属于同一数据类型 有限:数据元素个数是有限的 序列:数据元素由逻辑序号(逻辑位序)唯一确定…

Oracle SQL Developer导出数据库表结构,表数据,索引以及序列号等对象

目录 一、业务需求 三、环境说明 三、数据导出 四、数据导入 一、业务需求 通过Oracle SQL Developer软件将指定oracle数据库中的表结构,表数据,索引以及序列号等对象导出成SQL文件。 三、环境说明 数据库版本:Oracle Database 11g Expres…

【管理篇】如何向上沟通?

目录标题 向上沟通中下列问题最普遍和上级能不聊就不聊拿捏不好该不该和上级聊的分寸和尺度很难领会到上级的意图如何影响上级的一些观点和决策? 如何应对上述问题呢?😎如何管理上级?👌 向上沟通中下列问题最普遍 和上级能不聊就…

sql函数--10---In 多个字段

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.普通 in语句查询sqlMyBatis错误写法正确写法ListString[] 2.In多个字段sql案例脚本实例:错误写法:正确写法: MyBatis XML 写法…

Spring 事务及事务传播机制(1)

目录 事务 回顾: 什么是事务 为什么需要事务 事务的操作 Spring事务的实现 Spring编程式事务(简单了解即可, 问就是基本不用) 观察事务提交 观察事务回滚 Spring声明式事务 Transactional Transactional作用 事务 回顾: 什么是事务 定义: 事务是指逻辑上的一组操作, 构…

语义分割——前列腺分割数据集

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …

JVM认识之垃圾收集算法

一、标记-清除算法 1、定义 标记-清除算法是最基础的垃圾收集算法。它分为标记和清除两个阶段。先标记出所有需要回收的对象(即垃圾),在标记完成后再统一回收所有垃圾对象。 2、优点和缺点 优点:实现简单缺点: 可能…

初阶数据结构之单链表详解

目录 一:单链表概念 二:单链表的基本操作 1.定义结点 2.创建链表(初始化链表) 3:新增结点 4.单链表尾插 5.单链表头插 6.单链表尾删 7:单链表头删 8.打印单链表 9.查找单链表结点 10.单链表删除指定结点 1…

Centos7 安装 MySQL5.7 使用 RPM 方式

1 访问网站 https://downloads.mysql.com/archives/community/ 选择合适的版本,点击 Download。 2 上传下载好的 mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar 文件到 Centos7 机器,这里放到了 下载 目录。 3 解压 mysql-5.7.44-1.el7.x86_64.rpm-bundle.…

JS笔试手撕题

数据劫持 Vue2的Object.defineProperty() Vue2的响应式是通过Object.defineProperty()拦截数据,将数据转换成getter/setter的形式,在访问数据的时候调用getter函数,在修改数据的时候调用setter函数。然后利用发布-订阅模式,在数…

基于PSO粒子群优化的配电网可靠性指标matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 PSO算法应用于配电网优化的基本原理 5.完整程序 1.程序功能描述 基于PSO粒子群优化的配电网可靠性指标matlab仿真,指标包括saifi, saidi, caidi, aens四个。 2.测试软件版本…

深度学习--DCGAN

代码之后的注释和GAN的一样,大家如果已经掌握GAN,可以忽略掉哦!!! 在学习DCGAN之前,我们要先掌握GAN,深度学习--生成对抗网络GAN-CSDN博客 这篇博客讲的就是GAN的相关知识,还是很详…

POST请求

1、代码 import urllib.request import urllib.parse# 指定 URL url https://fanyi.baidu.com/sug# POST 请求携带的参数进行处理流程: # 1. 将 POST 请求参数封装到字典 data {kw: 西瓜 }# 2. 使用 parse 模块中的 urlencode 进行编码处理 data urllib.parse.u…

【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解

博主打算从0-1讲解下java进阶篇教学,今天教学第十篇:Java中线程安全、锁讲解。 当涉及到多线程编程时,保证线程安全是至关重要的。线程安全意味着在多个线程访问共享资源时,不会发生数据错乱或不一致的情况。为了实现线程安全&am…

JavaScript异步编程——05-回调函数

我们在前面的文章《JavaScript 基础:异步编程/单线程和异步》中讲过,Javascript 是⼀⻔单线程语⾔。早期我们解决异步场景时,⼤部分情况都是通过回调函数来进⾏。 (如果你还不了解单线程和异步的概念,可以先去回顾上一…

【Redis7】10大数据类型之Zset类型

文章目录 1.Zset类型2.常用命令3.示例3.1 ZADD,ZRANGE和ZREVRANGE3.2 ZSCORE,ZCARD和ZREM3.3 ZRANGEBYSCORE和ZCOUNT3.4 ZRANK和ZREVRANK3.5 Redis7新命令ZMPOP 1.Zset类型 Redis的Zset(Sorted Set,有序集合)是一种特殊的数据结构&#xff0…

Encoder——Decoder工作原理与代码支撑

神经网络算法 :一文搞懂 Encoder-Decoder(编码器-解码器)_有编码器和解码器的神经网络-CSDN博客这篇文章写的不错,从定性的角度解释了一下,什么是编码器与解码器,我再学习笔记补充的时候,讲一下…

TMS320F28335学习笔记-时钟系统

第一次使用38225使用了普中的clocksystem例程进行编译,总是编译失败。 问题一:提示找不到文件 因为工程的头文件路径没有包含,下图的路径需要添加自己电脑的路径。 问题二 找不到库文件 例程种的header文件夹和common文件夹不知道从何而来…

【Alluxio】文件系统锁模型之InodeLockList

InodeLockList接口,表示在inode tree里一个加了锁的路径。 沿着path,inodes和edges都被加锁了。path可能从edge或inode任意一个开始。 锁列表总是包含了一定数量的读锁(0个或多个),随后跟随着一些数量的写锁(0个或多个)。 举个例子: 对 /a/b/c/d 进行加锁,c->d这…

【深度学习】网络安全,SQL注入识别,SQL注入检测,基于深度学习的sql注入语句识别,数据集,代码

文章目录 一、 什么是sql注入二、 sql注入的例子三、 深度学习模型3.1. SQL注入识别任务3.2. 使用全连接神经网络来做分类3.3. 使用bert来做sql语句分类 四、 深度学习模型的算法推理和部署五、代码获取 一、 什么是sql注入 SQL注入是一种常见的网络安全漏洞,它允许…