【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 valuesetbit 键 偏移位 只能零或者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 descWITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。 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…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
