欢迎来到 朝阳市某某酸菜鱼经销部
全国咨询热线:020-123456789
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

新闻中心
Redis的数据结构之bitmap
  来源:朝阳市某某酸菜鱼经销部  更新时间:2024-05-05 06:54:36

Redis的数据结构之bitmap

背景

项目开发过程中 ,数据我们经常会使用boolean类型来存储数据 。结构例如记录用户每天签到,数据签到了是1,没签则为0,结构如果我们需要统计一年内的数据签到数,如果采用String来存储 ,结构需要每个用户都要记录 365次,数据当用户数量非常大时,结构需要的存储空间非常巨大  。为了解决这个问题 ,数据Redis提供了位图数据结构来解决此问题。结构

简介

bitmap简称位图,数据是结构由多个二进制位组成的数组,数组中的数据每个二进制位都有与之对应的偏移量  ,可以通过这些偏移量对位图中指定的结构一个或多个二进制位进行操作 。

数据结构

Redis的数据结构之bitmap

说明 :位图也可以看作一个字节数组,索引序号代表对应的值 ,bitmap默认值都为0

基础命令

Redis的数据结构之bitmap

setbit 设置二进制位的值

基本语法

setbit key offset valuen

注意:设置bit值时,其中offset的值不能为负数 ,否则会报ERR bit offset is not integer or out of range错误。

示例说明

将位图mbit设置为:10010100

#设置第一个位置为1n setbit mbit 0 1 n #设置第四个位置为1n setbit mbit 3 1 n #设置第六个位置为1n setbit mbit 5 1 n

位图的变化过程

Redis的数据结构之bitmap

位图的扩展

当用户执行setbit命令时,如果位图不存在 ,或者位图当前的大小无法满足用户想要执行的设置操作,那么Redis将对被设置的位图进行扩展 ,使得位图可以满足用户的设置请求。

例如用户执行如下命令:

setbit mbit 10 1n

Redis创建出的位图并不是只有11个二进制位 ,而是有两个字节共16个二进制位 ,如下图所示 。

Redis的数据结构之bitmap

说明 :从个图我们也可以看到,除了偏移量为10的二进制位之外,其他所有未被设置的二进制位都被初始化成了0。

getbit 获取二进制位的值

基本语法

getbit key offsetn

示例

Redis的数据结构之bitmap

bitcount 统计被设置的二进制位数量

基本语法

bitcount key start endn

示例

Redis的数据结构之bitmap

bitop 对一个或多个保存二进制位的字符串 key 进行位元操作

基本语法

bitop and key1 key2n

说明: bitop 命令支持 and  、or 、not  、xor这四种操作

  • and: 与运算符(&) 两个同时为1,结果为1,否则为0
  • or: 或运算(|) 一个为1,其值为1
  • not: 取反(0110 0001 NOT: 1001 1110)
  • xor: 异或运算,值不同为1,否则为0

示例

Redis的数据结构之bitmap

bitpos 用来查找指定范围内出现的第一个 0 或 1 (字节为单位)

基本语法

bitpos key start endn

示例

Redis的数据结构之bitmap

应用场景

  • 1.用户签到次数

1 代表签到,0 代表未签到 ,这样可以很轻松地统计出用户的活跃程度。相比于直接使用字符串而言 ,位图中的每一条记录仅占用一个bit位 ,从而大大降低了内存空间使用率 。

2.统计登录次数

总结

本文讲解了位图的基本数据结构和操作命令,位图适合于一些特定的场景,我们需要集合实际的业务场景情况 ,选择合适的数据结构存储能够大大的降低Redis的内存空间 。




友情链接盘点许多人玩的游戏有哪些2023 玩家多的手机游戏排行前五王者荣耀5月份返场皮肤2024年汇总最好玩的电眼小游戏海山公园附近哪里有城市轨道交通出入口?坐公交怎么过去?地址电话?福利中心一秒天堂,一秒地狱:「双相情感障碍」万字科普,看这篇就够了狂野女猎手新思路 野区战斗型辅助奶大力满级之后玩什么?巅峰之路进阶大推荐!dnf欢乐代币券什么时候清零2023国服公告:新英雄首周售卖7800金币 旧英雄降价火炬之光2洗点药水在哪买(火炬之光2刷点药水的位置)皎月女神完全食用攻略红警2刷钱秘籍工具及修改秘籍田黄石WLK影之哀伤:终极获取攻略指南 全方位解析,收藏这一篇就够了!敌方虞姬只有1点生命值,但是接连收到阿轲的几次攻击都没有被击杀 王者荣耀夫子的进阶试炼答案生死格斗游戏为何会沦为卖肉黄油(难道不是出色的格斗游戏吗)推荐十个gm福利手游盒子 哪个gm福利手游盒子比较好推荐十个gm福利手游盒子 哪个gm福利手游盒子比较好我的世界手机版种子代码大全 PHP常用代码大全新手入门必备火源之地10普通攻略,10PT火源关于BOSS的一些细节手游飞车里的特效哪里的,QQ飞车脚下的特效怎样在游戏中出现绝活作文《极品飞车15:变速2》去除过场动画补丁《英雄联盟》12.19版本英雄改动了哪些 12.19版本英雄更新内容介绍《火炬之光2》重装火炮工程师技能及属性加点推荐狂野女猎手新思路 野区战斗型辅助奶大力《暗黑破坏神3》死灵法师内容包开卖:88元日本妖怪传说——天狗盘点英雄联盟与原画不符的皮肤(锐雯血色精锐皮肤局内展示)火炬之光2洗点药水在哪买(火炬之光2刷点药水的位置)洛克王国火灵石怎么得 在哪得迷你世界2021慕斯最新皮肤激活码汀的微课堂:奥林匹斯的十二主神熊孩子给主播打赏花25万:家长请看好自己的手机云顶之弈记分板(运动会计分板)仙剑奇侠传4游戏单机版 v1.6.2熊孩子给主播打赏花25万:家长请看好自己的手机天堂W国际服钻石如何充值 天堂W国际服钻石直充教程无限隐身流兰陵王 半肉出装带你carry全场轻松超神
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

0.5538

Copyright © 2024 Powered by 朝阳市某某酸菜鱼经销部   sitemap