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

12.Redis之补充类型渐进式遍历

1.stream 

  • 官方文档的意思, 就是 stream 类型
  • 就可以用来模拟实现这种事件传播的机制~~
  • stream 就是一个队列(阻塞队列)
  • redis 作为一个消息队列的重要支撑
  • 属于是 List blpop/brpop 升级版本.
  • 用于做消息队列

 

2.geospatial 

  • 用来存储坐标 (经纬度)
  • 存储一些点之后,就可以让用户给定一个坐标,去从刚才存储的点里进行査找.(按照半径,矩形区域.)
  • 这个功能在"地图"应用中非常重要~~

 

3.HyperLogLog 

  • 应用场景只有一个,估算集合中的元素个数.
  • Set,有一个应用场景,统计服务器的 UV(用户访问的次数)
  • 使用 Set 当然可以统计 UV,但是最大的问题在于,如果 UV 数据量非常大,Set 就会消耗很多的内存空间~~
  • 假设 Set 存储 userld, 每个 userld 按照8个字节算~~
  • MB1亿 UV -> 8亿字节~~=>0.8G =>800MB(HyperLogLog 可以最多使用 12KB 空间,实现上述效果~)(不是 Redis 专有的~)
  • 之所以, 要消耗这么大的空间Set 需要存储每个元素.
  • 而 HyperLogLog 不存储元素的内容.
  • 但是能够记录"元素的特征”从而在新增元素的时候,能够知道当前新增的元素,是一个已经存在的元素,还是一个崭新的第一次出现的元素.
  • 用来计数 (记录出当前集合中有多少个不同的元素)但是不能告诉你这些元素都是啥~~
  • The Redis HyperLogLog implementation uses up to 12 KB and provides a standard error of
    0.81%
  • 这个东西具体还是得分析源码~~核心思路"位操作"=>精确性~~(存在一定的误差)

4.bitmaps(只针对整数)

  • 使用 bit 位来表示整数.
  • 0000 0000 0000 0000 0000 0000 0000 0000
  • 位图本质上, 就还是一个 集合.属于是 Set 类型针对整数的特化版本~~(节省空间~~)
  • HyperLogLog ~.
    更省空间呀!!
    既可以存储数字,也可以存储字符串~.不存储元素内容,只是计数效果~~
  • hyperloglog 存储元素的时候,提取特征的过程
    是不可逆的!!(信息量丢失了)
  • bitmap,类型存储元素了!!

5.bitfields 

  • C 进阶,自定义数据类型 =>结构体在内存中的布局
  • 位段 (不是 段位) =>也叫做位域
  • struct Test {
    int a:8;
    int b:16;
    int c:8;
  • 此处的数字,就描述这个成员实际占几个 bit 位!!
    位域 本质上是让我们精确进行位操作的一种方法~~
  • 上述 Redis 中的 bitfield 和C中的位域,非常相似的!!
  • bitfield 可以理解成一串二进制序列(字节数组)
  • 同时可以把这个字节数组中的某几个位,赋予特定的含义, 并且可以进行 读取/修改/算术运算 相关操作~~

6.渐进式遍历 

Redis 使⽤ scan 命令进⾏渐进式遍历键,进⽽解决直接使⽤ keys 获取键时可能出现的阻塞问
题。每次 scan 命令的时间复杂度是 O(1),但是要完整地完成所有键的遍历,需要执⾏多次 scan。
  • keys keys *一次性的把整个 redis 中所有的 key 都获取到.(这个操作比较危险.可能会一下子得到太多的 key, 阻塞 redis 服务器!)
  • 通过渐进式遍历,就可以做到,既能够获取到所有的 key, 同时又不会卡死服务器~
  • 不是一个命令,把所有的 key 都拿到.
    而是每执行一次命令,只获取到其中的一小部分~~这样的话保证当前这一次操作不会太卡~~
    要想得到所有的 key 就需要多次遍历了~~多次执行渐进式遍历命令(化整为零~)

6.1 scan 

以渐进式的⽅式进⾏键的遍历。
语法:
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
命令有效版本:2.8.0 之后
时间复杂度:O(1)
返回值:下⼀次 scan 的游标(cursor)以及本次得到的键。
⽰例:
redis 127.0.0.1:6379> scan 0
1) "17"
2) 1) "key:12"
2) "key:8"
3) "key:4"
4) "key:14"
5) "key:16"
6) "key:17"
7) "key:15"
8) "key:10"
9) "key:3"
10) "key:7"
11) "key:1"
redis 127.0.0.1:6379> scan 17
1) "0"
2) 1) "key:5"
2) "key:18"
3) "key:0"
4) "key:2"
5) "key:19"
6) "key:13"
7) "key:6"
8) "key:9"
9) "key:11"
  • count 这里的 数字,不是说每次遍历都得设置成一样~~
  • 这里的渐进式遍历,在遍历过程中,不会在服务器这边存储任何的状态信息此处的遍历是随时可以终止的~~不会对服务器产生任何的副作用~~
  • 渐进性遍历 scan 虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、修改、删除),可能导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑。

相关文章:

12.Redis之补充类型渐进式遍历

1.stream 官方文档的意思, 就是 stream 类型就可以用来模拟实现这种事件传播的机制~~stream 就是一个队列(阻塞队列)redis 作为一个消息队列的重要支撑属于是 List blpop/brpop 升级版本.用于做消息队列 2.geospatial 用来存储坐标 (经纬度)存储一些点之后,就可以让用户给定…...

品牌做电商控价的原因

品牌控价确实是一项至关重要的任务,它关乎着品牌形象、市场定位以及长期发展的稳定性。在电商平台上,价格的公开性和透明度使得消费者、经销商和其他渠道参与方都能够轻易地进行价格比较。因此,品牌方必须对电商渠道的价格进行严格的管控&…...

安全面试中的一个基础问题:你如何在数据库中存储密码?

3分钟讲解。 上周的面试故事 职位:初级安全工程师,刚毕业。 开始面试。 我:“这里你提到对数据安全有很好的理解。你能举例说明哪些方面的数据安全吗?” A:“当然。例如,当我们构建一个系统时,会…...

【python深度学习】——torch.min()

【python深度学习】——torch.min 1. torch.min()1.1 计算整个张量的最小值1.2 沿特定维度计算最小值1.3 比较两个张量 1. torch.min() torch.min()接受的参数如下: input: 输入的张量。dim: 沿指定维度寻找最小值。如果指定了该参数,返回一个元组,其中…...

华为校招机试 - 最久最少使用缓存(20240508)

题目描述 无线通信移动性需要在基站上配置邻区(本端基站的小区 LocalCell 与周边邻基站的小区 NeighborCelI 映射)关系, 为了能够加速无线算法的计算效率,设计一个邻区关系缓存表,用于快速的通过本小区 LocalCell 查询到邻小区 NeighborCell。 但是缓存表有一定的规格限…...

第三部分:领域驱动设计之分析模式和设计模式应用于模型

分析模式 分析模式是一种概念集合,用来表示业务建模中的常见结构。它可能只与一个领域有关,也可能跨越多个领域。“分析模式”这个名字本身就强调了其概念本质。分析模式并不是技术解决方案,他们只是些参考,用来指导人们设计特定领…...

PID传感器在光电显示行业VOC气体检测的应用

随着光电显示技术的飞速发展,液晶显示器等显示器件产品已经成为我们日常生活和工作中不可或缺的一部分。然而,在生产过程中,液晶显示器会释放大量的挥发性有机物(VOC)气体,对生产环境及工作人员的健康构成威…...

iOS推送证书过期处理

苹果推送证书的有效期都是一年,将要过期的时候,苹果官方会发邮件提醒。 一、过期 在电脑上找到并打开其它->钥匙串访问; 我的证书可以看到各个App的推送证书,如果过期了,显示红色X 二、重新创建 1、登陆apple开…...

蓝海卓越计费管理系统 agent_setstate.php SQL注入漏洞复现

0x01 产品简介 蓝海卓越计费管理系统是一套以实现网络运营为基础,增强全局安全为中心,提高管理效率为目的的网络安全运营管理系统,提供“高安全、可运营、易管理”的运营管理体验,基于标准的RADIUS协议开发,它不仅支持PPPOE和WEB认证计费,还支持802.1X接入控制技术,与其…...

【leetcode2765--最长交替子数组】

要求:给定一个数组,找出符合【x, x1,x,x-1】这样循环的最大交替数组长度。 思路:用两层while循环,第一个while用来找到符合这个循环的开头位置,第二个用来找到该循环的结束位置,并比较一下max进行记录。 …...

java文档管理系统的设计与实现源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的文档管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 文档管理系统的…...

西安航空学院电子工程学院领导莅临泰迪智能科技参观交流

5月26日,西安航空学院电子工程学院院长杨亚萍、专业教师刘坤莅临广东泰迪智能科技股份有限公司产教融合实训基地参观交流。泰迪智能科技董事长张良均、副总经理施兴、产品中心负责周东平、校企合作经理吴桂锋与泰迪智能科技韩伟进行热情了接待。双方就专业建设、协同…...

C++|设计模式(二)|简单工厂和工厂方法模式

本文探讨两种广泛使用的创建型模式——简单工厂模式和工厂方法模式,解释他们的实现细节、优势以及应用场景。 在下一篇文章中,我会补充抽象工厂模式,其实工厂模式主要就是为了封装对象的创建过程,如果我们不进行封装,…...

C语言从头学12——流程控制(一)

C语言程序的执行顺序是从前到后依次序执行的。如果想要控制程序执行的流程,就必须使用 流程控制的语法结构,分为条件执行和循环执行。 1、if语句 if 语句在前面的举例中曾经出现过,这里做详细介绍。该语句用于条件判断,满…...

10大领域应该怎么记?

文章目录 5大过程组10大领域49个过程输出输入工具与技术 参考文档: https://mp.weixin.qq.com/s/BJ-Dpn0zxTP0TCbeoJXb9A 5大过程组 启动、规划、执行、监控、收尾 10大领域 巧记:【挣饭进城市,咨购风菜干】【狗子整范进—成人风采】 整…...

通过Ubuntu虚拟机+Linux移植LVGL并通过linux Frame buffer显示

文章参考:https://gitee.com/socbis/linux-lvgl lvgl on linux Frame buffer 主机环境: Ubuntu 18.04lvgl 8.0.1 获取源码并运行demo 获取源码 需要3样东西来构建demo : lvgl核心控件库: 从此处获取源码 lvgl,选择版本 Release v8.0.1. 显示和触摸接…...

M功能-支付平台(三)

target:离开柬埔寨倒计时-221day 前言 今天周六,但是在柬埔寨还是工作日,想着国内的朋友开始休周末就羡慕呀,记不清在这边过了多少个周六了,多到我已经习惯了。而且今天技术部还停电了,真的是热的受不了呀…...

5G工厂长啥样

5G工厂是一种新型的工业互联网基础设施,利用5G为代表的新一代信息通信技术集成,打造新型工业互联网基础设施。在5G工厂中,自动化和智能化设备广泛使用,高度互联的工厂网络得以实现,远程监控和管理成为可能,…...

使用Python操作Jenkins

大家好,Python作为一种简洁、灵活且功能丰富的编程语言,可以与各种API轻松集成,Jenkins的API也不例外。借助于Python中的python-jenkins模块,我们可以轻松地编写脚本来连接到Jenkins服务器,并执行各种操作,…...

网络协议测试仪设计方案:474-便携式手提万兆网络协议测试仪

便携式手提万兆网络协议测试仪 一、平台简介 便携式手提万兆网络协议测试仪,以FPGA万兆卡和X86主板为基础,构建便携式的手提设备。 FPGA万兆卡是以Kintex-7XC7K325T PCIeX4的双路万兆光纤网络卡,支持万兆网络数据的收发和网络协议…...

5分钟掌握LibreHardwareMonitor:完全免费的硬件监控终极方案

5分钟掌握LibreHardwareMonitor:完全免费的硬件监控终极方案 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor is free software that can monitor the temperature sensors, fan speeds, voltages, load and clock speeds of your computer. 项目地…...

提示词合集【自用】

遇到什么问题 用什么方法解决的 为什么不用别的方法 还有没有更好的方法这是一个{简要描述},请根据以下方式,帮助我学习整个代码库: 项目结构 - 编译方式 - 入口 - 核心逻辑 - 时序图 - 各个步骤关键实现函数。 每次回复只聚焦其中一个部分&a…...

OpenClaw怎么部署?阿里云一键部署,轻松养龙虾!

还在羡慕别人的AI助手能写代码、查资料、干杂活?现在,通过阿里云OpenClaw快速部署方案,官方镜像一键部署,无需代码、只需两步,新手小白也能轻松“养龙虾”! 一、OpenClaw是什么?为什么叫“养龙虾…...

数字化转型深水区:技术从“支撑”到“驱动”的蜕变

对于身处一线的软件测试从业者而言,“数字化转型”早已不是一个陌生的词汇。我们经历了从手工测试到自动化测试的转变,见证了敏捷与DevOps带来的流程革新。然而,当转型浪潮进入“深水区”,一种更为根本的变革正在发生:…...

OrCAD Capture CIS DRC矩阵设置实战:如何自定义ERC检查规则

OrCAD Capture CIS DRC矩阵深度定制指南:从基础配置到高阶规则设计 1. 理解DRC矩阵的核心价值与应用场景 在复杂电路设计领域,标准化的设计规则检查(DRC)往往无法满足特殊元件的连接验证需求。OrCAD Capture CIS的ERC矩阵功能正是为解决这一痛点而生——…...

FPGA开发板吃灰?用Quartus II和你的旧板子复活一个硬件乘法器(4位乘数/拨码开关输入/LED显示)

让闲置FPGA开发板重获新生:手把手实现4位硬件乘法器 翻箱倒柜找出尘封已久的FPGA开发板,是不是总想着能做点有趣的东西?这次我们不用复杂的IP核,就用最基础的拨码开关和LED灯,配合Quartus II打造一个看得见摸得着的4位…...

10分钟掌握 Terraform AWS EKS Blueprints 的 Karpenter 集成:实现自动节点扩展与成本优化终极指南

10分钟掌握 Terraform AWS EKS Blueprints 的 Karpenter 集成:实现自动节点扩展与成本优化终极指南 【免费下载链接】terraform-aws-eks-blueprints Configure and deploy complete EKS clusters. 项目地址: https://gitcode.com/gh_mirrors/te/terraform-aws-eks…...

DLSS Swapper深度解析:游戏性能优化实战指南

DLSS Swapper深度解析:游戏性能优化实战指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper作为一款开源游戏性能优化工具,专为解决PC玩家面临的DLSS版本管理难题而生。在3A游戏对…...

PyFlow输入系统定制化:创建专属快捷键映射的完整指南

PyFlow输入系统定制化:创建专属快捷键映射的完整指南 【免费下载链接】PyFlow Visual scripting framework for python 项目地址: https://gitcode.com/gh_mirrors/py/PyFlow PyFlow作为一款强大的Python可视化脚本框架,允许用户通过直观的节点编…...

Phi-4-mini-reasoning效果验证:在MMLU-Pro数学子集上的实际推理准确率展示

Phi-4-mini-reasoning效果验证:在MMLU-Pro数学子集上的实际推理准确率展示 1. 模型概述 Phi-4-mini-reasoning是一款3.8B参数的轻量级开源模型,由微软Azure AI Foundry团队开发。这款模型专为数学推理、逻辑推导和多步解题等强逻辑任务设计&#xff0c…...