Redis中一些其他的数据类型渐进式遍历

  我们之前说了redis中的五个类型 分别是:String List Hash Set ZSet,那除了这五个redis文档中还给我们提供了一些其他的数据类型

  (一)一些其他的数据类型

 1.stream

  这里的数据类型我们只做简单的一些介绍,如果想了解具体要怎么做的,我们可以去redis官网中看看

  Redis 中Stream是一种强大的数据结构,用于处理数据流,类似于消息队列或只读日志。它适用于需要实时流处理、可扩展性、持久性和可靠消息传输的应用程序。

主要优势:
实时流式传输:实时向多个消费者传输数据。
可扩展性:处理大量消息。
持久性:确保可靠的消息传递和重播功能。
消费者组:允许多个消费者从同一流中读取数据。

2.geospatial

  这个命令通常是用来存储一个坐标的,而且在其中,我们可以通过一个坐标来对其他坐标进行范围查找,所以这个功能在地图中被广泛运用

这就是这个数据类型的一个简单命令

使用Redis获取地理空间数据的好处:

低延迟和高吞吐量:内存数据存储确保快速查询响应。

可伸缩性:有效地处理大量地理空间数据。

实时功能:非常适合需要即时位置查询的应用程序,如交付跟踪或商店定位器。

3.hyperloglog

  这个数据结构的应用场景只有一个,用来估算集合中的元素个数

  那这时候我们就有疑问,我们set中不是有scard来计算有多少元素嘛,为啥还要用这个数据类型呢?

  这是因为set是会切实的存储我们的数据就会导致我们的数据会占用我们很多的内存空间,而hyperloglog不会,他不会存储元素内容,但是他会通过一些元素的特征,在我们新增元素的时候,能够知道这个新增的元素是不是一个已经存在的元素,如果是不存在的,就会入集合(通过hyperloglog这个数据类型,可以将我们的空间控制在12kb内)

  但是这个是有误差的,我们说是通过一些元素的特征,那如果有两个元素特征一样。就会误以为元素的重复的,所以我们这里会有一个大概0.81%的误差存在

4.bitmap

 bitmap叫做位图,其实还是一个集合,但是是Set类型针对整数的一个特化版本,把一个个字节来当作数字进行存储,更加的节省空间

5.bitfield

   Redis位域允许你设置、增加和获得任意位长度的整数值,使用二进制编码的Redis字符串存储。位字段支持原子读、写和自增操作。

(二)渐进式遍历

 我们之前在说到keys *这个命令的时候我们说会因为一次性获取太多数据导致redis卡住了,然后回导致一系列问题,那如果我们一定要获取全部key就要进行拆分,一次获取一部分,这样多次获取就可以完成获取到所有key的操作

  渐进式遍历是一组命令,这一组命令的使用方法都是一样的,所以我们这里用SCAN来举例子

 首先我们cursor叫做光标,他指向了当前遍历的位置如果为0就表示这次的遍历从头开始获取 ,match pattern和keys的命令是一样的,也是类似于keys h?llo的效果,count是给这个命令的返回值提供一个参考,也就是要返回大概多少个元素(默认是10),type就是指定要查询的类型

 然后我们来看返回值,这个1)后的这个数字表示我们下一次的cursor应该从哪里开始,但是这个值并不是我们访问到哪一个元素了,只是一个字符串不是下标,所以只有redis服务器知道这个光标对应的一个元素位置。然后2)后的就是本次查询的元素

  同时我们要注意,count里的数字不需要每次都设置成一样的,这里的渐进式遍历是无状态的,遍历过程中不会在服务器里存储信息,所以我们的遍历是可以随时终止的

  但是渐进式遍历也有一定的风险,如果我们在渐进式遍历的期间,进行插入,删除操作,就会导致遍历时有所遗漏或者重复,但是这个也不知存在于渐进式遍历,其实所有遍历都会有这个问题

(三)database

 我们之前在学习mysql的时候有一个概念叫做database,一个mysql服务器上有很多database,一个database有很多个table,我们称为关系型数据库。

 那我们学习redis的时候只是说了是键值对的方式存数据,好像没有说到类似database这样的概念,但是其实我们redis是有的,只是不常用,而且我们对于数据库的操作也是极其有限的,不像mysql一样可以手动创建和删除

 redis默认给我们提供了16个数据库,分别是0-15号,这些数据库间的数据是隔离的,如果我们使用了一个数据库,那么就无法直接访问到另一个数据库的数据,默认情况下我们使用0号数据库

 我们通过这个命令就可以更改我们目前使用的数据库,我们之前讲过的flushall就是删除所有库上的所有key,我们还有个命令叫flushdb,是删除当前库上的所有操作

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

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

相关文章

探索未来:掌握python-can库,开启AI通信新纪元

文章目录 **探索未来:掌握python-can库,开启AI通信新纪元**背景介绍**python-can**库简介安装指南函数使用示例应用场景常见问题及解决方案总结 探索未来:掌握python-can库,开启AI通信新纪元 背景介绍 在人工智能和物联网的飞速…

鸢尾花书实践和知识记录[数学要素3-3几何]

书的作者 文章目录 思维导图使用到的函数几何的介绍(略)点线面和定义欧几里得几何原本的公理正多边形代码:如何绘制正多边形 三维的几何体柏拉图立体几何变换 角度和弧度角度弧度正负角(相位)三个角 勾股定理到三角函…

算法笔记(五)——分治

文章目录 算法笔记(五)——分治快排颜色分类排序数组数组中的第K个最大元素库存管理 III 归并排序数组交易逆序对的总数计算右侧小于当前元素的个数翻转对 算法笔记(五)——分治 分治算法字面上的解释是“分而治之”,就…

绘制随k变化的等熵面积比公式

xmax 4; Ma 0.1:0.05:xmax; figure; hold on; xlim([0,xmax]); ylim([0,10]);% 预定义k值的向量 k_values 1.2:0.1:1.4;% 创建一个细胞数组来存储图例标签 legendStrings cell(1, length(k_values));% 绘制每条曲线并记录图例标签 lines []; for idx 1:length(k_values)k…

LabVIEW自动生成NI-DAQmx代码

在现代数据采集和控制系统中,LabVIEW被广泛应用于各种工业和科研领域。其中,NI-DAQmx是一个强大的驱动程序,可以帮助用户高效地管理和配置数据采集任务。本文将介绍如何在LabVIEW中通过DAQ Assistant Express VI和任务常量自动生成NI-DAQmx代…

【leetcode】 45.跳跃游戏 ||

如果我们「贪心」地进行正向查找,每次找到可到达的最远位置,就可以在线性时间内得到最少的跳跃次数。 例如,对于数组 [2,3,1,2,4,2,3],初始位置是下标 0,从下标 0 出发,最远可到达下标 2。下标 0 可到达的…

2024最新的软件测试面试大全(含答案+文档)

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、软件测试基础面试题 1、阐述软件生命周期都有哪些阶段? 常见的软件生命周期模型有哪些? 软件生命周期是指一个计算机软件从功能确定设计,到…

【YOLO目标检测行人与车数据集】共5607张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式:YOLO格式 图片数量:5607 标注数量(txt文件个数):5607 标注类别数:2 标注类别名称:person、car 数据集下载:行人与车数据集 图片示例 数据集图片: …

JAVA基础语法 Day11

一、Set集合 Set特点:无序(添加数据的顺序和获取出的数据顺序不一致),不重复,无索引 public class demo1 {public static void main(String[] args) {//1.创建一个集合//HashSet特点:无序,不重…

Linux高级编程_27_系统调用

文章目录 系统调用函数分类系统编程概述系统调用概述**类UNIX系统的软件层次** 用户态和内核态系统调用与库函数的关系文件操作符概述文件磁盘权限 系统调用之文件操作open:打开文件close:关闭文件write:写入read:读取 文件状态fcntl 函数stat 函数 st_mode的值示例 1&#xff…

synchronized底层是怎么通过monitor进行加锁的?

一、monitor是什么 monitor叫做对象监视器、也叫作监视器锁,JVM规定了每一个java对象都有一个monitor对象与之对应,这monitor是JVM帮我们创建的,在底层使用C实现的。 ObjectMonitor() {_header;_count ; // 非常重要,表示锁计数…

【论文速看】DL最新进展20241002-自动驾驶、自监督学习、扩散模型、多模态与图像分割

目录 【自动驾驶】【自监督学习】【扩散模型】【多模态与图像分割】 【自动驾驶】 [轨迹预测] CASPFormer: Trajectory Prediction from BEV Images with Deformable Attention 论文链接:https://arxiv.org/pdf/2409.17790 代码链接:无 运动预测是自动…

基于深度学习的乳腺癌分类识别与诊断系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 乳腺癌是全球最常见的癌症之一,早期诊断对于治疗效果至关重要。近年来,深度学习技术在医学图像分析领域取得了显著进展,能够从大量的医学影像数据中自动学习和提…

[动态规划] 二叉树中的最大路径和##树形DP#DFS

标题:[动态规划] 二叉树中的最大路径和##树形DP#DFS 个人主页水墨不写bug (图片来源于网络) 目录 一 、什么是树形DP 二、题目描述(点击题目转跳至题目) NC6 二叉树中的最大路径和 算法思路: 讲解与参考代…

建筑业挂靠行为的防范建议

在建筑行业中,挂靠行为的普遍存在给许多企业带来了法律风险和信誉风险。为了防范这些风险,企业需要采取一系列有效的措施。 一、加强资质管理 企业应当通过合法途径获取和提升自身的资质等级,避免因资质不足而产生挂靠的需求。加强资质管理是…

Python从入门到高手4.2节-掌握循环控制语句

目录 4.2.1 理解循环控制 4.2.2 for循环结构 4.2.3 循环结构的else语句 4.2.4 while循环结构 4.2.5 循环结构可以嵌套 4.2.6 国庆节吃好玩好 4.2.1 理解循环控制 我们先来搞清楚循环的含义。以下内容引自汉语词典: 循环意指往复回旋,指事物周而复始地运动或变…

html+css+js实现Collapse 折叠面板

实现效果&#xff1a; HTML部分 <div class"collapse"><ul><li><div class"header"><h4>一致性 Consistency</h4><span class"iconfont icon-jiantou"></span></div><div class"…

Linux中的进程间通信之共享内存

共享内存 共享内存示意图 共享内存数据结构 struct shmid_ds {struct ipc_perm shm_perm; /* operation perms */int shm_segsz; /* size of segment (bytes) */__kernel_time_t shm_atime; /* last attach time */__kernel_time_t shm_dtime; /* last detach time */__kerne…

【Java】—— 集合框架:List接口常用方法与List接口的实现类

目录 4. Collection子接口1&#xff1a;List 4.1 List接口特点 4.2 List接口方法 4.3 List接口主要实现类&#xff1a;ArrayList 4.4 List的实现类之二&#xff1a;LinkedList 4.5 List的实现类之三&#xff1a;Vector 4.6 练习 4. Collection子接口1&#xff1a;List …

【Docker】docker的存储

介绍 docker存储主要是涉及到3个方面&#xff1a; 第一个是容器启动时需要的镜像 镜像文件都是基于图层存储驱动来实现的&#xff0c;镜像图层都是只读层&#xff0c; 第二个是&#xff1a; 容器读写层&#xff0c; 容器启动后&#xff0c;docker会基于容器镜像的读层&…