【Redis】十大数据类型(下篇)
文章目录
- redis位图(bitmap) --- 底子还是string
- 基本命令图示
- `setbit key offset value` setbit 键 偏移位 只能零或者1
- `getbit key offset` 查看
- 获取字符串长度 `strlen`
- 统计key中包含1的个数 `bitcount key`
- `bitop` 统计两个比特key是否都为1
- 技术落地:打卡签到,频繁修改数据库的,结果只有0和1
- redis基数统计(HyperLogLog) --- 底子是string
- UV:Unique Visitor,独立访客;统计搜索词条
- 基数统计算法
- 基数
- 基本命令图示
- 基数落地:天猫统计亿级UV
- redis地理空间 (GEO) --- 底子上是有序集合
- 获取经纬度
- 添加经纬度坐标 `GEOADD key 经度1 纬度1 位置名称1 经度2 纬度2 位置名称2...`
- 处理中文乱码
- `GEOPOS key value1 value2` 从键里面返回所有给定位置元素的位置 (经度和纬度)
- `GEODIST key value1 value2 [m | km | ft | mi] ` 返回两个给定位置之间的距离
- `GEORADIUS key 经度 纬度 10km...` 以给定的经纬度为中心,返回与中心的距离不超过给定最大距离的所有位置元素
- `GEORADIUSBYMEMBER key value 10km ...` 跟GEORADIUS类似
- `GEOHASH key value1 value2` 返回一个或多个位置元素的 Geohash 表示
- redis流 (Stream) --- 自成一脉stream
- 底层结构与原理
- 基础命令图示
- 特殊符号
- 向队列添加消息到队列末尾 `XADD key * id 1 cname z3`
- 范围检索 `XRANGE key start end [COUNT count]`
- `XREVRANGE KEY + - `
- `XDEL key MQID` 按照主键删除
- `XLEN key` 消息队列长度
- 截取 `XTRIM key maxlen|minlen 2`
- 读取消息(阻塞、非阻塞),只会返回ID大于某值的消息 `XREAD [COUNT count] stream key ID`
- 消费组执行-`XGROUP`
- 消费组执行-`XREADGROUP GROUP`
- 重要问题-ACK机制
- `XPENDING` 查询每个消费组内所有消费者 r已读取、但尚未确认]的消息
- `XACK` 向消息队列确认消息处理已完成
- `XINFO stream key` 打印出详情信息
- redis位域(bitfield)
- 应用、用途 --- 位域修改、溢出控制
- 基本语法 `BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]`
- `BITFIELD key [GET type offset]`
- `BITFIELD key [SET type offset value]`
- `BITFIELD key [INCRBY type offset increment]`
- `溢出控制OVERFLOW [WRAPISAT|FAIL]`
redis位图(bitmap) — 底子还是string
由0和1状态表现的二进制位的bit数组
位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。
-
基本命令图示
-
setbit key offset value
setbit 键 偏移位 只能零或者1Bitmap的偏移量是从零开始算的
-
getbit key offset
查看 -
获取字符串长度
strlen
不是字符串长度而是占据几个字节,超过8位后自己按照8位一组一byte再扩容
-
统计key中包含1的个数
bitcount key
-
bitop
统计两个比特key是否都为1 -
技术落地:打卡签到,频繁修改数据库的,结果只有0和1
redis基数统计(HyperLogLog) — 底子是string
HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
记录的不是数据本身,而是统计数;是去重脱水后的真实数据
统计本身也存在些许误差,误差范围在0.81%
-
UV:Unique Visitor,独立访客;统计搜索词条
-
基数统计算法
-
基数
是一种数据集,去重复后的真实个数
-
基本命令图示
-
基数落地:天猫统计亿级UV
redis地理空间 (GEO) — 底子上是有序集合
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,包括
添加地理位置的坐标。
获取地理位置的坐标。
计算两个位置之间的距离。
根据用户给定的经纬度坐标来获取指定范围内的地理位置集合
核心思想就是将球体转换为平面,区块转换为一点
-
获取经纬度
百度提供的api:https://api.map.baidu.com/lbsapi/getpoint/
-
添加经纬度坐标
GEOADD key 经度1 纬度1 位置名称1 经度2 纬度2 位置名称2...
处理中文乱码
-
GEOPOS key value1 value2
从键里面返回所有给定位置元素的位置 (经度和纬度) -
GEODIST key value1 value2 [m | km | ft | mi]
返回两个给定位置之间的距离ft:英尺;mi英里
-
GEORADIUS key 经度 纬度 10km...
以给定的经纬度为中心,返回与中心的距离不超过给定最大距离的所有位置元素GEORADIUS city 116.418017 39.914402 10 km withdist withcoord count 10 withhash desc
GEORADIUS city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc
WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。 WITHCOORD: 将位置元素的经度和维度也一并返回。 WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大 COUNT 限定返回的记录数。
-
GEORADIUSBYMEMBER key value 10km ...
跟GEORADIUS类似 -
GEOHASH key value1 value2
返回一个或多个位置元素的 Geohash 表示geohash算法生成的base32编码值
redis流 (Stream) — 自成一脉stream
Redis Stream 是 Redis 5.0 版本新增加的数据结构。
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。
而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失
总结:redis流就是Redis版的MQ消息中间件+阻塞队列
-
底层结构与原理
-
基础命令图示
-
特殊符号
符号 含义 -
、+
最小和最大可能出现的Id $
$
表示只消费新的消息,当前流中最大的id,可用于将要到来的信息>
用于XREADGROUP命令,表示迄今还没有发送给组中使用者的信息,会更新消费者组的最后ID *
用于XADD命令中,让系统自动生成id -
向队列添加消息到队列末尾
XADD key * id 1 cname z3
-
消息ID必须要比上个 ID 大
-
默认用星号表示自动生成规矩
*
用于XADD命令中,让系统自动生成 id -
客户端显示传入规则:
Redis对于ID有强制要求,格式必须是时间戳-自增Id这样的方式,且后续ID不能小于前一个ID
-
-
范围检索
XRANGE key start end [COUNT count]
- 用于获取消息列表 (可以指定范围忽略删除的消息
- start 表示开始值,-代表最小值
- end 表示结束值,+代表最大值
- count 表示最多获取多少个值
-
XREVRANGE KEY + -
与XRANGE 的区别在于,获取消息列表元素的方向是相反的,end在前,start在后
-
XDEL key MQID
按照主键删除 -
XLEN key
消息队列长度 -
截取
XTRIM key maxlen|minlen 2
允许的最小id,从某个id值开始比该id值小的将会被抛弃
-
读取消息(阻塞、非阻塞),只会返回ID大于某值的消息
XREAD [COUNT count] stream key ID
非阻塞
阻塞
-
消费组执行-
XGROUP
- $表示从Stream尾部开始消费
- 0表示从Stream头部开始消费
- 创建消费者组的时候必须指定 ID, ID 为 0 表示从头开始消费,为 $ 表示只消费新的消息,队尾新来
-
消费组执行-
XREADGROUP GROUP
-
>
表示从第一条尚未被消费的消息开始读取 -
消费组groupA内的消费者consumer1从mystream消息队列中读取所有消息
-
但是,不同消费组的消费者可以消费同一条消息
-
负载均衡
让组内的多个消费者共同分担读取消息,所以,我们通常会让每个消费者读取部分消息,从而实现消息读取负载在多个消费者间是均衡分布的
-
-
重要问题-ACK机制
-
XPENDING
查询每个消费组内所有消费者 r已读取、但尚未确认]的消息查询每个消费组内所有消费者 r已读取、但尚未确认]的消息
查看某个消费者具体读取了哪些数据
下面抓图所示:consumer2已读取的消息的 ID是1659430293537-0
- 一旦消息1659430293537-0被consumer2处理了consumer2就可以使用 XACK 命令通知 Streams,然后这条消息就会被删除
-
XACK
向消息队列确认消息处理已完成
-
XINFO stream key
打印出详情信息
redis位域(bitfield)
通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果。
说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。
将一个Redis字符串看作是一个由二进制位组成的数组并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改
-
应用、用途 — 位域修改、溢出控制
hello 等价于 0110100001100101011011000110110001101111
-
基本语法
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
-
BITFIELD key [GET type offset]
hello 等价于 0110100001100101011011000110110001101111
-
BITFIELD key [SET type offset value]
-
BITFIELD key [INCRBY type offset increment]
-
溢出控制OVERFLOW [WRAPISAT|FAIL]
-
WRAP:使用回绕 (wrap around) 方法处理有符号整数和无符号整数的溢出情况
-
SAT:使用饱和计算 (saturation arithmetic)方法处理溢出下溢计算的结果为最小的整数值,而上溢计算的结果为最大的整数值
-
FAIL:命令将拒绝执行那些会导致上溢或者下溢情况出现的计算并向用户返回空值表示计算未被执行
-
相关文章:

【Redis】十大数据类型(下篇)
文章目录redis位图(bitmap) --- 底子还是string基本命令图示setbit key offset value setbit 键 偏移位 只能零或者1getbit key offset 查看获取字符串长度 strlen统计key中包含1的个数 bitcount keybitop 统计两个比特key是否都为1技术落地:打卡签到,频…...

【第十一届“泰迪杯”数据挖掘挑战赛】B题产品订单的数据分析与需求预测“解题思路“”以及“代码分享”
【第十一届泰迪杯B题产品订单的数据分析与需求预测产品订单的数据分析与需求预测 】第一大问代码分享(后续更新LSTMinformer多元预测多变量模型) PS: 代码全写有注释,通俗易懂,包看懂!!!&…...
Python入门到高级【第一章】
预计更新第一章. Python 简介 Python 简介和历史Python 特点和优势安装 Python 第二章. 变量和数据类型 变量和标识符基本数据类型:数字、字符串、布尔值等字符串操作列表、元组和字典 第三章. 控制语句和函数 分支结构:if/else 语句循环结构&#…...
【泰凌微TLSR8258 zigbee】OTA升级操作方法
目录 程序启动模式多地址启动模式Bootloader 启动模式多地址启动模式 Flash 分布Bootloader 启动模式Flash分布模式OTA升级OTA初始化OTA ServerOTA ClientOTA升级固件生成程序启动模式 在介绍OTA升级操作方法前,我们先介绍一下程序的启动模式,以及不同启动模式的优缺点。 多…...

网络基础设施监控
在过去的几十年里,网络基础设施在规模和功能方面都变得复杂起来。不断增长的业务需求和不断增长的技术能力推动了这种快速增长,监控网络基础设施以确保其最佳性能和最大效率已成为任何希望成为行业领跑者的组织不可或缺的优先事项。 什么是网络基础设施…...

OPNET Modeler 例程——创建一个包交换网络
文章目录一、例程简介二、创建新的包格式三、创建新的链路模型四、创建中心交换节点模型五、创建中心交换节点的进程模型六、创建周边节点模型七、创建周边节点进程模块八、创建网络模型九、收集统计量十、配置并仿真总结一、例程简介 本例程将仿真一个简单的包交换网络&#…...
JSON 基础结构
什么是JSON JSON,说白了就是JavaScript用来处理数据的一种格式,这种格式非常简单易用。 JSON,大部分都是用来处理JavaScript和web服务器端之间的数据交换,把后台web服务器的数据传递到前台,然后使用JavaScript进行处…...
雷达基础知识
雷达频率划分 以下是按照频率和波长划分雷达频段的表格: 波段名称频率范围(GHz)波长范围(cm)应用领域VHF0.03 - 0.3100 - 10气象雷达、空管雷达、航空雷达UHF0.3 - 3100 - 10航空雷达、海上雷达、地面雷达、火控雷达…...

【二阶锥规划】考虑气电联合需求响应的气电综合能源配网系统协调优化运行【IEEE33节点】(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

qt 编译器 调试器
电脑版本:win10 64位 qt版本:based on Qt 5.14.0(msvc 2017, 32位) Qt Creator 4.11.0 qt安装包:qt-opensource-windows-x86-5.9.9.exe 安装过程一路next,安装完成后,默认使用的…...

低代码平台助力AIGC:让人工智能技术更加普及和高效
今年人工智能的风是吹了一波又一波,从ChatGPT到文心一言,短短四个多月的时间,GPT完成了从3.0、3.5到4.0的推新发布,一步步刷新了民众对于目前人工智能技术发展的认知底线,让人们直观地感受到了人工智能技术的蓬勃发展。…...
Qt中Model/View结构
Qt中Model/View结构 Model/View框架的核心思想是模型(数据)与视图(显示)相分离,模型对外提供标准接口存取数据,不关心数据如何显示,视图自定义数据的显示方式,不关心数据如何组织存…...

中纬ZOOM35全站仪参数和使用说明书
免棱镜测程采用全新EDM,明显提升测距功能。极细可见激光免棱镜测程最高可达1000m,同等测程下无棱镜精度较高。 绝对编码度盘中纬静态条码式码盘测角,开机无需初始化,利用同样技术的徕卡全站仪,测角精度可高达0.5&#…...

【Note5】网络,并发/IO,内存,linux/vi命令,正则,Hash,iNode,文件查找与读取,linux启动/构建
文章目录1.局域网:CSMA/CD2.互联网:ARP,DHCP,NAT3.TCP协议:telnet,tcpdump,syn/accept队列4.HTTPS协议:摘要(sha、md5、crc)。win对文件进行MD5校验用自带的c…...

华为MRS_HADOOP集群 beeline使用操作
背景 由于项目测试需要,计划在华为hadoop集群hive上创建大量表,并且每表植入10w数据,之前分享过如何快速构造hive大表,感兴趣的可以去找一下。本次是想要快速构造多表并载入一些数据。 因为之前同事在构造相关测试数据时由于创建…...

PCB模块化设计10——PCI-E高速PCB布局布线设计规范
目录PCB模块化设计10——PCI-E高速PCB布局布线设计规范1、PCI-E管脚定义2、PCI-E叠层和参考平面3、 PCB设计指南1、阻抗要求2、线宽线距3、长度匹配4、走线弯曲角度5、测试点、过孔、焊盘6、AC去耦电容放置方法7、金手指和连接器的注意事项8、其他的注意事项PCB模块化设计10——…...
Java简介
Java简介 Java是一种面向对象的编程语言,由Sun Microsystems于1995年发布。Java设计的初衷是为了开发可移植、高性能的应用程序。Java代码可以在不同的操作系统上运行,包括Windows、Linux、Mac等。 Java是一种广泛使用的编程语言,用于开发各…...

python框架有哪些,常用的python框架代码
Python的应用已经相当广泛了,可以做很多事情,而 Python本身就是一个应用程序,我们也可以说 Python是一个高级语言。由于 Python有很多包,所以我们不能把所有的 Python包都了解一下,也不能把所有的包都读一遍࿰…...

jsp设计简单的购物车应用案例
代码解释 <%request.setCharacterEncoding("UTF-8");if (request.getParameter("c1")!null)session.setAttribute("s1",request.getParameter("c1"));if (request.getParameter("c2")!null)session.setAttribute("…...

VueX是什么?好处?何时使用?
VueX相关1、VueX是什么?2、使用VueX统一管理状态的好处3、什么样的数据适合存储到Vuex中?1、VueX是什么? VueX是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间数据的共享。 如果没有VueX…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...

从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...

GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
python打卡day49@浙大疏锦行
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...