Redis-新数据类型-Bitmaps

devtools/2024/10/18 12:23:10/

新数据类型-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.ppmy.cn/devtools/38385.html

相关文章

Android OpenMAX(三)高通OMX组件实现基础

上一节了解了OMX组件实现的基础内容,这一节我们以高通OMX实现为例,简单看看如何实现一个OMX组件。本节代码参考自: omx_core_cmp.cpp qc_omx_component.h omx_vdec.h omx_vdec.cpp Tips:本篇文章旨在简单了解如何实现一个OMX组件,细节的内容不会仔细解读,代码阅读跳跃幅度…

CentOs9编译C指令报错的一种解决方案

今天使用centos9编译c代码时,显示bash: gcc: command not found... 下图是我的报错页面,依据提示信息安装gcc之后依旧显示失败 找到其中一种解决方式,完美解决,供参考 输入以下指令更新软件包列表,这里需要等待几分…

星光日报:简单报纸排版的HTML与CSS解析

引言&#xff1a; 随着Web技术的不断发展&#xff0c;越来越多的人开始使用HTML和CSS来制作各种网页内容&#xff0c;包括报纸。本文将通过一个简单的报纸排版示例&#xff0c;为大家讲解如何使用HTML和CSS来制作一个具有基本结构的报纸页面。 HTML结构&#xff1a; <head…

mysql IF语句,模糊检索

使用MySQL IF语句完成条件检索 IF(expr1,expr2,expr3)&#xff0c;expr1如果满足条件就用expr2&#xff0c;否则用expr3 SELECTa.*,count(*) AS stdSum FROMidb_std_power_engin_v1 a WHERE1 1 AND (IF( KV IS NOT NULL, a.NAME REGEXP KV, 1 1 ) ORIF( KV IS NOT NULL, …

242.有效字母的异位词

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输…

flutter日期选择器仅选择年、月

引入包&#xff1a;flutter_datetime_picker: 1.5.0 封装 import package:flutter/cupertino.dart; import package:flutter/material.dart; import package:flutter_datetime_picker/flutter_datetime_picker.dart;class ATuiDateTimePicker {static Future<DateTime> …

Java | Leetcode Java题解之第78题子集

题目&#xff1a; 题解&#xff1a; class Solution {List<Integer> t new ArrayList<Integer>();List<List<Integer>> ans new ArrayList<List<Integer>>();public List<List<Integer>> subsets(int[] nums) {dfs(0, nums…

标准引领 | 竹云参编《面向云计算的零信任体系》行业标准正式发布!

近日&#xff0c;中华人民共和国工业和信息化部公告2024年第4号文件正式发布行业标准&#xff1a;YD/T 4598.1-2024《面向云计算的零信任体系 第1部分&#xff1a;总体架构》&#xff08;后简称“总体架构”&#xff09;&#xff0c;并于2024年7月1日起正式实施。 该标准汇集大…