【Redis】数据类型补充

之前我们已经学习了redis中常见的五种数据类型:string, list, hash,set, zset。这五种数据类型是最常见,最广泛被使用的,下面我们再来认识一下针对特定场景下的一些数据类型

🐼Streams

根据官方文档的介绍,stream可以模拟事件传播的机制。其实就是一个生产者消费者的阻塞队列,作为消息队列的重要支撑,属于list的blpop,brpop的升级版本。


🐼Geospatial

这个数据类型用来存储坐标,经纬度。

存储一些点之后,就可以让用户给定一个坐标,去从刚刚存储的点为中心,或者一个范围,半径进行查找。比如找到在地图中以某个地点为中心,半径为1km的所有餐馆。


🐼HyperLogLog

HyperLogLog是一种概率数据结构,用于估计集合的基数。

我们之前说过,set有一个应用场景,就是统计UV的次数。

使用Set当然可以统计,但是如果UV的数量非常大,那么Set会占很多内存空间。假设每个用户的userid为8个字节,一亿个用户那么就是8亿字节,相当于0.8G,如果直接使用Set

但是对于场景直接使用HypeerLogLog就仅仅需要12kb。是不是数量级一下小了好多倍。

HyperLogLog适用于统计是不是第一次出现的元素,它提取了元素的特征,从而在新增元素的时候, 能够知道这个元素是一个已经存在的元素,还是一个崭新的元素,但是它不能存储元素的内容,也就是说这个过程是不可逆的。它可以记录当前集合中有多少元素,但是不能告诉你这些元素都是啥。

如果我们想统计一下UV,这种场景,只想计数,但是又不想知道具体的元素内容,就可以使用HyperLogLog,如果即想计数,又想知道元素的内容,那么还是使用Set吧


🐼 Bitmaps

Bitmaps本质还是一个集合,属于是Set类型针对整数的特化版本。实际上就是普通的字符串(byte array),每个 bit 位只能是 0 或 1

  • 存储 1 亿用户在线状态只需约 12MB(100,000,000 / 8 / 1024 / 1024 ≈ 12MB

  • 相比 Set 类型节省大量内存

如果对于一个场景只有两面性,比如用户在线或者不在线,那么就可以使用Bitmaps。1表示用户在线,0表示用户不在线。并且可以支持查找。也就是保存了用户的状态信息,而HpterLogLog没有保存用户的状态信息。


🐼 Bitfileds

即位域,有点类似于C语言的位段。

可以将bitmaps理解为一串二进制序列,字节数组。

同时可以把这个字节数组的某几位,赋予特殊的含义,进行位操作,来达到不同的效果。


相关推荐
jiayou6412 小时前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤1 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区2 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号33 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏3 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐3 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再3 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest3 天前
数据库SQL学习
数据库·sql
jnrjian3 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle