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

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


相关推荐
難釋懷7 小时前
SpringDataRedis数据序列化器
redis·缓存
枷锁—sha7 小时前
【PortSwigger Academy】SQL 注入绕过登录 (Login Bypass)
数据库·sql·学习·安全·网络安全
逍遥德9 小时前
PostgreSQL 中唯一约束(UNIQUE CONSTRAINT) 和唯一索引(UNIQUE INDEX) 的核心区别
数据库·sql·postgresql·dba
工业甲酰苯胺9 小时前
字符串分割并展开成表格的SQL实现方法
数据库·sql
科技块儿9 小时前
IP定位技术:游戏反外挂体系中的精准识别引擎
数据库·tcp/ip·游戏
衫水10 小时前
[特殊字符] MySQL 常用指令大全
数据库·mysql·oracle
卓怡学长10 小时前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏
小句10 小时前
SQL中JOIN语法详解 GROUP BY语法详解
数据库·sql
阿杰 AJie11 小时前
MySQL 里给表添加索引
数据库·mysql
昊昊该干饭了11 小时前
一个真实查询需求如何从表设计走到高效 SQL
数据库·sql