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

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


相关推荐
静听山水15 分钟前
StarRocks表模型详解
数据库
静听山水21 分钟前
Redis核心数据结构-Set
数据结构·数据库·redis
数研小生37 分钟前
亚马逊商品列表API详解
前端·数据库·python·pandas
洛豳枭薰38 分钟前
MySQL 并行复制
数据库·mysql
无尽的沉默39 分钟前
Redis下载安装
数据库·redis·缓存
曾经的三心草41 分钟前
redis-9-集群
java·redis·mybatis
czlczl200209251 小时前
增删改查时如何提高Mysql与Redis的一致性
数据库·redis·mysql
打工的小王1 小时前
MySql(二)索引
数据库·mysql
数据知道1 小时前
PostgreSQL 性能优化:如何提高数据库的并发能力?
数据库·postgresql·性能优化