【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理解为一串二进制序列,字节数组。

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


相关推荐
这个DBA有点耶27 分钟前
ELT 工具选型完整指南:从 ETL 差异分析到工程落地
数据库·架构·代码规范
IvorySQL36 分钟前
PostgreSQL 日报|堆表选择性索引更新(10 月 13 日)
数据库·人工智能·postgresql·开源·区块链
张洛闻Eren42 分钟前
Ansible【第一课】:Ansible介绍
运维·数据库·云原生·kubernetes·github·ansible
深圳市益普科技有限公司1 小时前
中小封装厂上 MES,为什么十个项目九个坑?
大数据·数据库·人工智能
云边云科技_云网融合1 小时前
从 POS 机到访客 Wi-Fi:零售门店安全建设的完整解法
服务器·网络·数据库
天行健,君子而铎2 小时前
知形-数据库风险监测系统:非侵入式、可溯源、差异化的数据库安全方案
网络·数据库·安全
这个DBA有点耶2 小时前
分布式事务深度:TCC空回滚、悬挂与Saga补偿风暴的根因与解法
数据库·mysql·代码规范
执笔为剑2 小时前
2.1.2-2、V8R3迁移到V8R6-迁移介绍
数据库
一条泥憨鱼2 小时前
【Redis | 黑马点评】短信登录功能 源码深度分析
java·redis·后端·session·黑马点评
hiahiahia1232 小时前
Message 和对话
服务器·前端·数据库