redis那些你不经常使用的数据结构
mhr18 2024-11-10 09:46 21 浏览 0 评论
如果你了解过redis,或者使用过它,那么一定知道它的5种常用数据结构,而且如果你面试有被问过redis的话,那么这5种基本数据结构也一定会被问到,不过,我们今天不讨论这些,我们讨论下除此之外的数据结构,也许平时你没有使用过,也许你也没有了解过,不过这不重要,重要的是它们是非常总要的数据结构,在解决特定问题的时候很好用。
Btimap
理论上来说,bitmap并不属于一种特殊的数据结构,从本质上来说,它也是一种string类型数据结构,只不过存储的值为bit,也就是我们常说的二进制010101这样的数据。
这样的数据结构可以帮助我们使用很少的存储空间,就可以完成很高效的数据查询。
比如我们有这样的需求,我们想要统计每一天的用户签到人数,常规的做法就是将数据放到set集合里面,然后对数据求和即可,然而如果数据量非常大的时候,这样会浪费很大的存储空间,而bitmap完美解决了这样的问题。首先我们可以将每天的日期作为key,然后签到的人的id转换成bit值存储,也就说如果它签到了,那么对应位置的值为1,否则为0,这样就可以通过一个key:value对来统计签到人数。需要说明的是,对于位操作,redis有bitcout来快速统计总和。
HyeprLogLog
从名字我们可以看出来,它有两个log,也就是说它通过两次取对数的操作节省了存储空间。需要说明的一点,这是一个概率数据结构,也就说它只能计算出大概率数值,并不能精确地得到精准数值,不过在大数据问题中,能够用最少的代价得到一个大致精确地值就是我们追求的。
在redis里面,每个hyperloglog键只需要花费12kb大小空间,就可以存储2^64个元素,这大大节省了内存的存储空间。
hyperloglog的数学原理就是基于伯努利过程,是在同样的条件下重复地、相互独立地进行的一种随机试验。
对于一个数据我们通过计算它的hash值得到二进制01值,然后进行分桶操作,再然后在每个桶中再进行位置的计算,因为通过两次的操作就可以让存储的数据成指数增加,而反过来也就说当我们要存储一定的数据,只需要取两次对数的位数的bit就可以存下,所以这也是hyperloglog的名字由来。
有了hyerploglog,还是统计上面的签到的话,我们的存储空间就大大减小了,当然了这是以牺牲一定的精准度为代价的。
Stream
我们都知道在redis中,我们可以通过list来实现消息队列的功能,但是那只是简单地实现,它缺少持久化的功能,缺少数据复制的功能,而Steam就是为了解决这个问题而产生的。
当你觉得rabbitmq过于庞大的时候,那么redis的stream数据结构可以很好地帮助你实现消息队列的几乎全部功能,但是如果你的项目够大,还是请使用正常的消息队列。
GEO
计算2个点的距离我们很容易计算出来,但是如果计算2个地理经纬度坐标点的距离就会变得复杂,如果计算多个点呢?问题就会变得更加复杂,不过这些计算问题,在redis都可以通过GEO来简单实现。
GEO主要是用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。在使用地图的时候,我们经常需要计算得到当前位置一定范围内餐馆,或者影院等建筑物的信息,而通过GEO我们就可以很方便地实现这个功能。
在redis中,通过georadiusbymember这个函数,我们就可以方便地计算出周围点的信息。
总结
相比较string,list,set,sort set, hash这5种结构,你会发现上面介绍的数据结构使用场景很单一,或者说它们的存在主要是为了解决某些特定问题而存在的。
没有哪种数据结构更好的说法,每一种数据结构都有它自己的应用场景,否则它也不会被创造出来。
相关推荐
- Java面试必备八股文(java面试必备八股文pdf下载)
-
Java基础1.Java的特点面向对象平台无关性(JVM实现)健壮性(自动内存管理、异常处理)多线程支持安全性2.Java基本数据类型8种基本类型:整型:byte(1),short(2),in...
- 嵌入式ADC驱动框架:通道控制 + 数据读取全流程剖析
-
一个嵌入式操作系统或驱动框架中的ADC(模拟数字转换器)驱动模块,用于管理ADC通道的配置、读取、启停等功能。以下是对各部分的详细解读:一、基本结构和宏控制#ifdefMR_USING_AD...
- 40亿QQ号,不超过1G内存,如何去重?
-
分享一道网上很火的面试题:40亿QQ号,不超过1G的内存,如何去重?这是一个非常经典的海量数据去重问题,并且做了内存限制,最多只能1GB,本文跟大家探讨一下~~一、常规思路我们日常开发中,如果谈到去重...
- PS各个工具的作用及用法(ps中各个工具的用途及使用方法)
-
PS各个工具的作用及用法1.移动工具,可以对PHOTOSHOP里的图层、照片进行移动。2.选框工具,负责建立形状的选区,可以用来抠图。只有选区内的图像可以修改。(1)矩形选择工具,可以对图像选一个矩形...
- PS中常用图片的格式(ps中常用图片的格式是什么)
-
PhotoshopCC支持多种文件格式,如TIFF、GIF、JPEG等,文件格式决定了图像数据的存储方式以及文件是否与一些应用程序兼容。使用【存储】或者【存储为】命令保存文件时,可以在弹出的对话框...
- 浅析 BMP 位图(bmp位图是什么意思)
-
1、BMP是什么?BMP是Bitmap(位图)的简称,是windows显示图片的基本格式。在windows下,任何格式的图片文件(包括视频播放)都要转化为位图才能显示出来,各种各样格式的图片文件也都...
- ClickHouse在自助行为分析场景的实践应用
-
一、自助分析场景OLAP技术选型1.1背景1.2OLAP选型考量1.3ClickHouse二、高斯平台自助分析场景2.1系统介绍2.2系统架构2.3ClickHouse在高斯平台的业务场景...
- PostgreSQL 模糊查询优化(全模糊、忽略大小写优化)
-
模糊查询是数据库系统中非常常见的一种操作,比如查找用户名、邮件、用户地址、电话等等。我们知道前缀匹配(LIKExx%)是可以走索引的,但是全模糊(LIKE%xx%)就无法走索引,甚至忽略大小写等这...
- Java手写一个bitmap(java怎么写)
-
位图(Bitmap)是一种高效的,使用位来记录数据的结构,多用于存储和操作大量布尔值(通常是true或false)。位图通过使用位(bit)来表示布尔值,从而节省存储空间并提高操作效率。位(Bit):...
- 位图(Bitmap)管理在驱动与资源分配中的应用
-
位图(Bitmap)管理在驱动与资源分配中的应用在驱动开发与资源分配的领域中,高效的资源管理方式至关重要。位图(Bitmap)管理凭借其独特的优势,成为了开发者们手中的得力工具。接下来,让我们深入探究...
- Oracle 11g数据库数据仓库模式与一般事务处理模式
-
在Oracle11g数据库安装过程中,数据仓库模式与一般事务处理模式(OLTP)是针对不同业务场景设计的两种架构方案,其核心区别体现在应用场景、数据结构、性能优化方向等多个维度。以下是具体对比:一...
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)