首页 > 数据库 >Redis 的bitmap byte转位bit

Redis 的bitmap byte转位bit

时间:2023-05-24 11:48:01浏览次数:37  
标签:字节 二进制 转位 Redis bitmap 签到 byte bit

bitmap

我们知道redis的bitmap本身不是一种数据结构,底层实际上依靠字符串进行存储,可以借助字符串进行位操作,由于redis的字符串最大内存位512MB,所以bitmap的bit位也是有上限的,8 * 1024 * 1024 * 512 = 2^32,由于C语言字符串的末尾都有一位分隔符,所以bitmap存储的实际上限位 2^32 - 1,所以我们可以借助bitmap来实现很多功能,最常用的比如签到功能,比如用一年一个key,所占用存储空间位 365 / 1024 = 0.36kb,假设有10w个用户全部参与签到 0.36 * 100000 / 1024 = 35MB,10w个用户1年才占用35Mb存储空间,就可以签到功能,想比如结构化数据库,所占存储空间可以说是非常小,并且签到数据保留的作用性不是很大,也没有这个必要,所以设置这些key的过期时间为1年

应用

以签到为例,如果需要获取一年当中的某一天是否签到,只需要getbit,对应的offset为dayOfYear,如果需要统计一年当中已经签到了多少天,可以直接使用bitcount进行统计,但是如果想统计已经签到的天数,具体到一年的第几天就需要进一步操作了
由于存储的时候是设置的bit值,所以不能直接用get方法获取值,需要获取当前字符串的byte
如果用jedis更方便获取byte值,这里使用的是stringRedisTemplate,稍微

标签:字节,二进制,转位,Redis,bitmap,签到,byte,bit
From: https://www.cnblogs.com/LiuFqiang/p/17427805.html

相关文章

  • 第一章Redis概述-动力节点最新Redis7笔记
    1Redis概述1.1Redis简介【动力节点】Redis入门到高级教程,全网最新最全redis缓存教程,redis百科大全Redis,Remote Dictionary Server,远程字典服务,是一个使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、NoSQL开源内存数据库,其提供多种语言的API。Redis之所以称......
  • SpringBoot中操作Redis解析JsonArray数据为对象List(ruoyi字典值sys_dict为例)
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662在上面搭建系统的基础上,会将系统的字典值缓存进redis中。看数据格式存储的是Json数组,如何从redis中读取并解析成对象的list从而进行数据处理。注......
  • 关于redis的描述、数据结构、持久化学习笔记
    前言本文围绕面试问题、redis学习记录。本文是个人的笔记,会有遗漏或含糊的地方。描述下redisredis是一款非关系型数据库,它是以key-value的形式存在数据,因为它的数据在内存中所以它的读写速度极高。当然它支持持久化,将数据以二进制形式或者以命令的形式持久化到磁盘。然后......
  • Redis源码安装(Linux环境)
     下载源码:wgethttps://download.redis.io/redis-stable.tar.gz  解压:tar-xzvfredis-stable.tar.gz  编译&安装:cdredis-stablemakePREFIX=~/redisinstall    =================================== ......
  • Redis数据类型及存取命令
    理想三旬浓烟下,奔赴山海与荒野一,Redis常用五种数据类型及存取命令1,字符串(String)1#设置字符串的值2SETkeyvalue34#获取字符串的值5GETkey2,列表(List)1#在列表左侧添加一个元素2LPUSHkeyvalue34#在列表右侧添加一个元素5RPUSHkeyvalue67#获......
  • docker安装redis
    docker安装mysql1、下载镜像文件dockerpullmysql:5.72、创建实例并启动dockerrun-p3306:3306--namemysql\-v/mydata/mysql/log:/var/log/mysql\-v/mydata/mysql/data:/var/lib/mysql\-v/mydata/mysql/conf:/etc/mysql\-eMYSQL_ROOT_PASSWORD=root\-dmy......
  • mysql、redis、mongo本地docker部署命令备忘
    1mysqldocker环境部署####获取镜像dockerpullredis####启动mysqldockerrun--name=mysql-it-p3306:3306-eMYSQL_ROOT_PASSWORD=123456-dmysql####登录mysql-h127.0.0.1-P3306-uroot-p1234562redisdocker环境部署####官⽅方指引https://hub.docker.c......
  • redis学习随笔
    redis中的单个命令是原子操作。多条命令可以用multi,exec,discard等命令。1.multi开始执行事务,后面的命令都会放到队列里,暂不执行2.exec执行,会将队列的命令按顺序执行,失败不回滚3.discard取消事务。redis为什么事务失败不会滚:1.redis的命令错误一般是因为错误的语法,或者用错了......
  • 【Java Web】MultipartFile和byte[]互转
    接口接收文件@RequestParam("file")MultipartFilefileMultipartFile转byte[]Stringname=file.getName();StringoriginalFilename=file.getOriginalFilename();StringcontentType=file.getContentType();Stringbytes=file.getBytes();byte[]转Multipar......
  • 你说啥?Redis中除了五大数据类型,还有特殊数据类型!
    一、geospatial地理位置1.1>概述可以用于基于地理位置的业务场景。比如:查询两地之间的距离,方圆几里存在的地理位置等等。Redis提供了geospatial相关的8个指令,操作如下图所示:1.2>GEOADD(v3.2.0)指令格式:GEOADDkeylongitudelatitudemember[longitudelatitudemember...]指令含......