当前位置: 首页 > news >正文

Redis远程字典服务器(9)—— 类型补充

类型查询传送门:Understand Redis data types | Docs

一,stream类型

官方文档对于这个类型的解释是:streams是一个数据结构,它表现得像一个 “append-only log”,就是只能往后面添加,底层是字符串,就像是一个日志;可以把一个事件投放给多个目标

首先解释下什么是“事件”:

  1. 在前面讨论单线程模型时,谈到了epoll / IO 多路复用,每次网卡(socket)上有可读可写得数据,都会通过这种事件回调机制来通知到应用程序代码
  2. 在前端中,JS里也有事件,比如点击事件,键盘事件等
  3. 有些操作,我们无法预知它什么时候出现,只能等这个事情出现之后,再采取动作

官方文档的意思,就是stream类型可以用来模拟事件传播得机制,有事件的时候就把字符串插入到数据结构中,然后就会被应用程序检测到从而做出对应得动作

总结:stream就是一个阻塞队列,是Redis作为一个消息队列得重要支撑,属于是List blpop / brpop 的升级版本

二,geospatoal类型

这个单词的意思是:“地理空间”,我们经常用“经纬度”来描述地球上的某一个位置,所以geospatoal这个数据结构的作用就是存储坐标(经纬度)

它存储一些点之后,就可以让用户给定一个坐标,去从刚才存储的点里进行查找(按照半径,矩形区域等等)

简单来说,就是在一个平面放上很多坐标,然后我们可以自定义输入一个坐标,然后按照我们的方法去查找周围的坐标

三,hyperloglog类型

这个类型很简单,应用场景只有一个,就是估算集合中的元素个数

Set有一个应用场景,就是统计服务器的UV(用户访问的次数),使用set可以解决,但是当UV的数据量很大,set就会消耗很多内存空间

假设set存userid,每个userid8个字节,1亿 UV ==> 8亿字节 ==> 0.8G ==> 800MB,乍一看没很大,但是如果使用hyperloglog,仅仅可以使用12KB空间就能实现上述效果

之所以set要消耗这么大的空间,是因为它要存储每个userid元素,而hyperloglog不存储元素的内容,但是能记住“元素的特征”,从而在新增元素的时候,能够知道当前新增的元素,是一个已经存在的元素,还是第一次出现的元素

所以这个类型的最大作用就是:用来计数,但是不能告诉你这些元素都是啥,适合应用于单纯的计数的场景

对于“元素的特征”,要想理解这个还是得分析源码,其核心思路是“位操作”,所以存在一定精确性,存在一定的误差,所以是估算集合中的元素,官方文档中的描述是“误差不超过0.81%”。

注意:hyperloglog存储元素的时候,提取特征的过程是不可逆的,因为信息量丢失(给你块猪肉你可以做成火腿肠,但是给你火腿肠没办法还原成猪肉) 

四,bitmap类型

这个就是位图,关于位图之前已经详细解释过:C++——位图与布隆过滤器

就是使用比特位来表示整数,达到节省空间的效果,所以位图本质上还是一个集合,属于Set针对整数的特化版本,目的就是节省空间,而且位运算比较高效

五,bitfield类型

可以把这个类型叫做“位域”,我们之前在C语言进阶讲过一个东西叫做“位段”,位段也可以叫做“位域”:C语言进阶——自定义类型_c语言自义类型-CSDN博客

位域本质是是一种让我们精确进行位操作的一种方法,bitfield和C语言中的位段,是非常相似的

bitfield可以理解成一串二进制序列(字节数组),同时可以把这个字节数组的某几个位,赋予特定的含义,并且进行 读取/修改/算数运算 等相关操作

位域这个东西,相比之前的string / hesh来说,目的仍然是节省空间


http://www.mrgr.cn/news/3320.html

相关文章:

  • [Windows CMD] 查看网络连接状态 netstat -na | findstr “TCP“
  • Linux 音媒体小项目练手
  • plantUML介绍和使用
  • 汇编世界的桥梁:链接器与加载器的奥秘
  • C语言:递归
  • PHP概述、环境搭建与基本语法讲解
  • 【网络】套接字(socket)编程——TCP版
  • 【MADRL】基于MADRL的单调价值函数分解(QMIX)算法
  • FPGA时序约束
  • 【数据分享】《中国社会统计年鉴》(2006-2023)
  • JavaScript_7_练习:随机抽奖案例
  • 代码随想录算法训练营第二十九天| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 【企业高性能web服务器】
  • 数据结构day03(栈 Stack 顺序栈、链式栈 )内含具体详细代码实现
  • 场景分析-库存扣减
  • 宠物空气净化器是智商税吗?希喂、范罗士热门产品真实性能测试
  • 8个我平时每天都会看的网站,涵盖办公、娱乐、学习等
  • 使用Python将xml标注文件转换为coco json格式
  • Leetcode-day23-回溯-子集问题
  • 白酒与素食:健康与美味的双重享受