深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展

news2024/11/16 13:39:06

目录

前言

Stream

geospatial

HyperLogLog

Bitmaps

Bitfields


前言


redis 中最关键的五个数据类型 String、List、Hash、Set、Zset 应用最广泛,同时 redis 也推出了额外的 5 个数据类型,他们分别是针对特殊场景才进行的应用的.

 

Ps:这几种类型的具体使用不用记,记你也记不住,因为不常用,因此我们只需要了解其对应的应用场景,需要的时候去官方文档一查就清楚了~

Stream


Stream 就是一个阻塞队列,是 redis 作为消息队列的重要支撑,属于是 List 的 blpop / brpop 的升级版本.

Stream 类型,按照官方文档的意思,就是用来模拟实现事件传播机制~  

事件是什么?例如以下两个场景:

  1. epoll / io 多路复用:每次网卡 / socket 上有可读可写的数据,都会通过这种事件回调的机制来通知到咱们的应用程序代码.
  2. JS:点击事件、键盘事件、窗口大小改变 / 位置改变事件.

简单来讲,就是有些操作,我们也不知道什么时候出现,只能等这个事件出现之后,再采取动作.

geospatial


 用来存储坐标,就是经纬度的.

存储了一些点之后,就可以让用户给定一个坐标,去刚才存储的点中查找(按照半径,矩形区域...),这个功能在 “地图” 应用中非常重要~

 

HyperLogLog


应用场景只有一个,就是用来估算集合中元素的个数.

Set 有一个应用场景就是统计 UV(多少个不同用户进行了访问) ,但问题在于一旦数据非常大,Set 就会消耗很多的内存空间~

假设 Set 存储 userId,每个按照 8 字节计算,1亿 UV = 8 亿字节,相当于 800 MB,而使用 HyperLogLog 最多会使用 12KB 的空间.

Ps:HyperLogLog 不存储元素的内容,但是能够记录 “元素的特征”(具体实现,看源码才知道,核心思路是“位操作”),从而在新增元素的时候,能够知道新增元素,是一个存在的元素,还是一个新元素~

因此,HyperLogLog 只用来计数(记录当前集合有多少个不同的元素 => 多少个不同用户访问了你这个服务器),但是不能告诉你这些元素是啥~

Bitmaps


 使用 bit 位来表示整数,存储的底层数据结构式位图~

位图的本质还是一个集合,属于式 Set 类型针对整数优化的特殊版本(节省空间)

对比 HyperLogLog:

HyperLogLog 既可以存储数字也可以存储字符串,但是不存储元素内容,只是计数效果,因此 hyperloglog 存储元素,提取特征的过程是不可逆的(信息丢失),例如给你个猪肉,可以做成火腿肠,但是给你火腿肠是还原不回猪肉的。

Bitfields

 

bitfields 和 C 语言中的位域是很相似的~

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

位域相比较 String / hash 来说,目的是为了节省空间.

使用场景就是游戏中的杀怪计数:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/798096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face

总述 HuggingGPT 让LLM发挥向路由器一样的作用,让LLM来选择调用那个专业的模型来执行任务。HuggingGPT搭建LLM和专业AI模型的桥梁。Language is a generic interface for LLMs to connect AI models 四个阶段 Task Planning: 将复杂的任务分解。但是这里…

Python GUI设计 tkinter module

Python GUI设计 GUI 设计可以大大简化你的工作编代码最头疼的内容就是你不能以超快的速度获得你想要的结果 这是最头疼的尤其是你要调试的时候 tkinter module 中的属性与方法 创建窗口 root tkinter.Tk() root.title("GUI example") # 设置窗口标题 .pack pack方…

SOC FPGA之HPS模型设计(二)

根据SOC FPGA之HPS模型设计(一), Quartus工程经过全编译后会产生Handoff文件夹、SOPCINFO文件、SVD文件 二、生成Preloader镜像文件 通过信息交换文件Handoff文件生成Preloader,需要用到SOC EDS Preloader也被称为spl(Second Program Loader)或u-boot…

PLC-Recorder的高速采集有多快?0.5ms算快吗?看控制器能力了!

大家知道,PLC-Recorder有一个高速采集的功能,基于TCP连接或UDP报文,速度取决于发送端的能力。对于西门子PLC,能做到1-2ms的采集速度,但是,我在前面的文章里提到了0.5ms的高速采集,哪个控制器能这…

移动IP的原理

目的 使得移动主机在各网络之间漫游时,仍然能保持其原来的IP地址不变 工作步骤 代理发现与注册 主机A:主机A移动到外地网络后,通过“代理发现协议”,与外地代理建立联系,并从外地代理获得一个转交地址,…

YAML+PyYAML笔记 2 | YAML缩进、分离、注释简单使用

2 | YAML缩进、分离、注释简单使用 1 简介2 缩进3 分离4 多行文本4.1 折叠块4.2 字面块4.3 引用块 5 注释5.1 行内注释5.2 块注释5.3 完美注释示例 1 简介 YAML 不是一种标记语言,而是一种数据格式;使用缩进和分离来表示数据结构,不需要使用…

tauri在github上进行自动更新打包并发版过程,实战操作避坑

从网上找了很多很多的文章,结果还是入坑了,一个问题找了一天才解决: Error A public key has been found, but no private key. Make sure to set TAURI_PRIVATE_KEY environment variable. 596 ELIFECYCLE  Command failed with exit code…

Unbantu环境 Poetry下载安装,亲自测试过

一、下载安装 我使用pip来进行的安装,命令如下: pip install poetry通过上面步骤后,会在这个目录生产执行文件 /home/xxxx/./local/bin在这个目录下面,可以看到poetry文件。 成功后,需要配置环境变量 二、配置环…

Yolov8 引入ICCV 2023 | 南开大学提出LSKNet:遥感旋转目标检测新SOTA | 助力backbone

💡💡💡本文改进:Large Selective Kernel Network (LSKNet)通过一个空间选择机制来实现的,该机制对一连串的大 depth-wise 卷积核所处理的特征进行有效加权,然后在空间上将它们合并。这些核的权重是根据输入动态确定的,允许该模型自适应地使用不同的大核,并根据需要调…

音频深度学习变得简单:自动语音识别 (ASR),它是如何工作的

一、说明 在过去的几年里,随着Google Home,Amazon Echo,Siri,Cortana等的普及,语音助手已经无处不在。这些是自动语音识别 (ASR) 最著名的示例。此类应用程序从某种语言的语音音频剪辑开始&…

项目文档管理的基本指南

项目文档是一种关键的项目管理资源,它可以提供清晰度,保证参与项目的每个人都在同一页面上,从而确保项目按时、按预算完成。 本文将讨论项目文档的重要性、如何在项目中使用项目文档以及选择好合适的项目文档管理软件的技巧。 什么是项目文…

【C语言】位段枚举联合

鹅,鹅,鹅,曲项向天歌。白毛浮绿水,红掌拨清波。 — 唐代骆宾王《咏鹅》 这篇博客我们会详细介绍位段,以及枚举类型和联合类型 位段是什么?🍀 位段的声明和结构是类似的,有两个不同…

数据库数据恢复-导致oracle数据库数据丢失的常见故障分析

作为存储和处理数据的系统,oracle数据库在使用过程中不可避免会出现各种导致数据丢失和数据损坏的故障。北亚企安数据恢复工程师根据十多年的案例经验,总结出oracle数据库常见故障以及恢复可能性。 1、Oracle数据库无法启动或者启动后无法正常工作。 如果…

如何写一篇吸引人的美食营销软文?纯干货

信息化时代,美食营销软文已经成为了餐饮业吸引顾客的重要手段之一。那么,如何才能写出一篇吸引人的美食营销软文呢?本文伯乐网络传媒将从以下几个方面进行深刻讨论。 一、抓住顾客的心理需求 要写一篇成功的美食营销软文,首先要抓…

最新版Onenet云平台HTTP协议接入上传数据

2023年最新版Onenet更新后,原来的多协议接口已经找不到,由于需要用HTTP接入,就研究了一下新版Onenet云平台,搞清楚Onenet云平台的鉴权信息,就知道怎么上传数据了,包括后续上传实际数据,其实只需…

Jenkins 还可以支持钉钉消息通知?一个插件带你搞定!

Jenkins 作为最流行的开源持续集成平台,其强大的拓展功能一直备受测试人员及开发人员的青睐。大家都知道我们可以在 Jenkins 中安装 Email 插件支持构建之后通过邮件将结果及时通知到相关人员。 但其实 Jenkins 还可以支持钉钉消息通知,其主要通过 Ding…

800*A. Cherry

Example input 4 3 2 4 3 4 3 2 3 1 2 69 69 6 719313 273225 402638 473783 804745 323328output 12 6 4761 381274500335解析: 每次只计算相邻两个数的乘积,乘积的最大值即为答案。 取三个元素 a,b,c,那么其最大值…

Vue3 Radio单选切换展示不同内容

Vue3 Radio单选框切换展示不同内容 环境&#xff1a;vue3tsviteelement plus 技巧&#xff1a;v-if&#xff0c;v-show的使用 实现功能&#xff1a;点击单选框展示不同的输入框 效果实现前的代码&#xff1a; <template><div class"home"><el-row …

HuntingNFT 全新玩法引爆市场,GameFi掘金新热土?

“HuntingNFT v2 版本推出后&#xff0c;全新上线的驻守玩法、献祭玩法正在为玩家带来十分可观且持续的收益&#xff0c;其正在成为 GameFi 掘金的新热土。” 在经历了 2021 年的短暂狂欢后&#xff0c;随着 2022 年年初市场遇冷转熊&#xff0c;GameFi 市场也开始不断降温。根…

IDEA live templates

surround 在SQL的xml里 可以修改变量 官方文档 CDATA not null <if test"$SELECTION$ ! null and $SELECTION$ ! "> and $VAR1$ #{$SELECTION$} </if>not null like mysql <if test"$SELECTION$ ! null and $SELECTION$ ! "> and…