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

Redis 特殊数据类型

目录

1、redis地理空间(GEO)

2、redis基数统计(HyperLogLog)

3、redis位图(bitmap)

4、redis位域bitfield)

5、redis流(Stream)


1、redis地理空间(GEO)

Redis 的地理空间数据结构(GEO)可以用于存储地理位置信息,并支持附近位置搜索等功能。

命令描述
GEOHASH返回一个或多个位置元素的 Geohash 表示
GEOPOS从key里返回所有给定位置元素的位置(经度和纬度)
GEODIST返回两个给定位置之间的距离
GEORADIUS以给定的经纬度为中心, 找出某一半径内的元素
GEOADD将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
GEORADIUSBYMEMBER找出位于指定范围内的元素,中心点是由给定的位置元素决定

 应用场景

  1. 附近的人/店铺搜索:可以使用 GEO 数据结构来存储用户或商店的地理位置信息,然后通过 Redis 提供的命令进行附近的人或店铺搜索,例如查找附近的餐馆、商店或其他服务设施。

  2. 地理围栏监控:通过 GEO 数据结构记录移动物体的实时位置,并结合有序集合(Sorted Set)来实现地理围栏监控,比如在特定区域内的移动车辆或设备监控。

  3. 地理位置标注:将地理位置信息与其他业务数据关联,比如将特定位置的销售点、活动场所等信息与地理位置进行标注,以支持位置相关的业务查询和展示。

2、redis基数统计(HyperLogLog)

Redis 的基数统计(HyperLogLog)数据结构用于估算一个集合中不重复元素的个数,能够在占用较小内存的同时对大数量级的数据进行近似计数。

PFADD 添加元素到 HyperLogLog 中

 示例:PFADD my_hyperloglog user1 user2 user3

 说明:向名为 my_hyperloglog 的 HyperLogLog 结构中添加了三个元

PFCOUNT 获取 HyperLogLog 中的近似基数

 示例:PFCOUNT my_hyperloglog

 说明:返回值为近似的基数,即 HyperLogLog 中不重复元素的数

PFMERGE合并多个 HyperLogLog

 示例:PFMERGE merged_hyperloglog my_hyperloglog1 my_hyperloglog2

 说明:将多个 HyperLogLog 合并为一个新的 HyperLogLo

应用场景

  1. 独立访客统计:可以使用 HyperLogLog 数据结构来进行网站或应用的独立访客数量统计,而不需要存储每个访客的详细信息,节省内存空间。

  2. 活跃用户统计:对于大型在线平台,可以使用 HyperLogLog 计数活跃用户数量,而无需维护每个用户的详细浏览记录。

  3. 广告点击量统计:在广告分析领域,HyperLogLog 可以用于估算独立用户的广告点击数量,而不必存储每次点击的详细信息。

3、redis位图(bitmap)

Redis中的位图(bitmap)是一种特殊的数据结构,它通常用于表示某种状态或者标记,每个比特位可以表示一个状态或者标记的存在与否。

setbit设置位图中的某一位

 示例:SETBIT user:1:online 1001 1

说明:将user 1的在线状态设置为1(在线),偏移量为1001

getbit获取位图中的某一位的值

​​​​​

 示例:GETBIT user:1:online 1001

 说明:返回值为0或1,表示偏移量为1001的位的

strlen统计字节数占用多少示例:user:1:online
bitcount统计位图中值为1的位数

 示例:BITCOUNT user:1:online

 说明:可选参数startend用于指定范围,不指定则统计整个位图中值为1的位

bitop对多个位图进行逻辑运算

 示例:BITOP AND online_users user:1:online user:2:online

 说明:将user 1和user 2的在线状态做与操作,存储到online_users位图

应用场景

  1. 用户在线状态:可以使用位图来表示用户的在线状态,每个比特位代表一个用户,值为1表示在线,值为0表示离线。
  2. 统计用户活跃度:使用位图记录用户每天的活跃情况,以便后续进行活跃度分析和统计。
  3. 标记用户行为:可以用位图来标记用户的某些行为,比如签到、阅读等,每个比特位代表一个行为,值为1表示有该行为,值为0表示没有。

4、redis位域bitfield)

Redis 的位域(Bitfield)数据结构提供了位级别的操作,可以方便地对二进制位进行读取和修改,适用于一些需要对大量位操作的场景。

BITFIELD设置位域中的指定位

示例:BITFIELD mykey SET u8 0 1 GET u4 5

说明:在名为 mykey 的位域中,将第 0 位设置为 1,并获取第 5 位到第 8 位的值

GETBIT获取位域中的指定位

示例:GETBIT mykey 0

返回值为指定偏移处的位的值。

BITOP对位域进行位运算

示例:BITOP AND destkey key1 key2

说明:将多个位域进行指定的位运算(AND/OR/XOR/NOT)后存储到目标位域。

应用场景

  1. 权限管理:位域可以用于表示用户或角色的权限,每一位代表一种权限状态,通过位运算可以方便地进行权限的赋予与撤销。

  2. 实时状态标记:对于实时状态的标记,比如设备状态、用户在线状态等,位域可以高效地存储并更新这些状态信息。

  3. 布隆过滤器:布隆过滤器是一种空间效率很高的概率型数据结构,常用于快速判断一个元素是否存在。在 Redis 中,可以利用位域来实现布隆过滤器。

5、redis流(Stream)

Redis 的流(Stream)数据结构是一个有序、可持久化的消息队列,可以用于实现消息发布订阅系统、事件日志、通知系统等功能。

XADD发布消息到流

示例:XADD mystream * name John age 30

说明:向名为 mystream 的流中添加一条消息,使用 * 作为自动生成的消息ID。

XREAD消费者消费消息

示例:XREAD BLOCK 10000 STREAMS mystream 0

说明:从名为 mystream 的流中读取消息,并阻塞 10 秒等待新消息。

XACK消费者确认消息

示例:XACK mystream mygroup 1606388386385-0 1606388386386-0

说明:消费者组 mygroup 确认处理了特定的消息ID。

XGROUP创建消费者组

示例:XGROUP CREATE mystream mygroup $ MKSTREAM

说明:创建名为 mygroup 的消费者组,并使用 $ 表示从最新的消息开始消费。

应用场景

  1. 消息队列:流可以作为高性能的消息队列使用,允许按照发布的顺序进行消费,支持多个消费者并行处理消息。这种模式非常适合需要处理大量实时消息的业务场景。

  2. 事件日志:流可以用于记录系统的事件日志,包括用户操作、系统状态变化等,以便后续进行分析和故障排查。

  3. 通知系统:流可以用于构建实时的通知系统,例如实时推送用户的消息、提醒和通知。

相关文章:

Redis 特殊数据类型

目录 1、redis地理空间(GEO) 2、redis基数统计(HyperLogLog) 3、redis位图(bitmap) 4、redis位域bitfield) 5、redis流(Stream) 1、redis地理空间(GEO) Redis 的地理空间数据结构(GEO)可以用于存储地理位置信息,并支持附近位置搜索等功能…...

【Windows网络编程】二.TCP套接字编程与主机上线实验

API: socket: 套接字函数创建绑定到特定传输服务提供程序的套接字。 函数原型:SOCKET WSAAPI socket([in] int af,[in] int type,[in] int protocol );参数: af:地址规范系列: AF_INET:IPv4&…...

Qt 事件循环

引出 UI程序之所叫UI程序,是因为需要与用户有交互,用户交互一般是通过鼠标键盘等的输入设备,那UI程序就需要有能随时响应用户交互的能力。 一个C程序的main函数大概是下面这样: int main() {...return 0; } 我们如何使程序能随…...

【趣味随笔】YOLO的“进化史”极简版(YOLO v1-->YOLOP)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

Leetcode421. 数组中两个数的最大异或值

Every day a Leetcode 题目来源:421. 数组中两个数的最大异或值 解法1:贪心 位运算 初始化答案 ans 0。从最高位 high_bit 开始枚举 i,也就是 max⁡(nums) 的二进制长度减一。设 newAns ans 2i,看能否从数组 nums 中选两个…...

SPRINGBOOT整合CXF发布WEB SERVICE和客户端调用(用户和密码验证)

主要分为客户端和服务端 服务端 pom配置 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.3</version><relativePath/> <!-- lookup parent fro…...

代码随想录训练营Day5:哈希数组

算是哈希的容器&#xff1a;数组&#xff08;适合连续存放&#xff09;&#xff1b;set&#xff0c;map&#xff08;适合无序存放&#xff09;。所以数组操作就是hash[i];而set,map.insert(元素)&#xff0c;map可以map[]是因为map存放了键值对可以索引查找。关于几个数组相加等…...

腾讯云3年轻量2核2G4M和2核4G5M服务器540元三年

腾讯云轻量应用服务器特价是有新用户限制的&#xff0c;所以阿腾云建议大家选择3年期轻量应用服务器&#xff0c;一劳永逸&#xff0c;免去续费困扰。腾讯云轻量应用服务器3年可以选择2核2G4M和2核4G5M带宽&#xff0c;3年轻量2核2G4M服务器540元&#xff0c;2核4G5M轻量应用服…...

程序员的护城河:职业发展的关键元素

目录 1. 技术深度与广度 2. 项目经验与实际操作 3. 沟通与团队协作 4. 持续学习与自我更新 5. 社区参与与开源贡献 6. 创新思维与解决问题的能力 7. 职业规划与自我管理 结语 在科技日新月异的今天&#xff0c;程序员的竞争已经不再仅仅依赖于技术水平&#xff0c;而是…...

基于SpringBoot+Vue的在线学习平台系统

基于SpringBootVue的在线学习平台系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 用户界面 登录界面 管理员界面 摘要 本文设计并实现了一套基于Spri…...

Kafka+redis分布式锁结合使用心得总结

#kafka部分 KafkaListener(topics "#{${vsmart_alert_detection_tms_send_message_topic}.split(,)}", groupId "${vsmart.alert.detection.consumer.group}") public void vsmartAlertDetectionTmsSendMessage(ConsumerRecord<?, ?> record, A…...

cmd打开idea

当我们用idea打开一个项目的时候&#xff0c;有时候这个项目目录是有的&#xff0c;但是用idea的open却找不到&#xff0c;有时候我要重新关闭窗口&#xff0c;再open好多次才有 于是我现在使用命令打开&#xff0c;先把idea安装路径的bin目录放在path里面 然后cd到项目路径&…...

javaScript爬虫程序抓取评论

由于评论区目前没有开放的API接口&#xff0c;所以我们不能直接通过编程获取到评论区的内容。但是&#xff0c;我们可以通过模拟浏览器的行为来实现这个功能。以下是一个使用Python的requests库和BeautifulSoup库来实现这个功能的基本思路&#xff1a; import requests from bs…...

RT-DETR 应用 CARAFE:特征内容感知重新组装

特征上采样是现代卷积神经网络架构中的关键操作,例如特征金字塔。其设计对于密集预测任务,如目标检测和语义/实例分割至关重要。在本研究中,我们提出了一种称为内容感知特征重组(CARAFE)的通用、轻量级且高效的操作符,以实现这一目标。CARAFE具有以下几个优点:(1)大的…...

Git Commit 之道:规范化 Commit Message 写作指南

1 commit message 规范 commit message格式都包括三部分&#xff1a;Header&#xff0c;Body和Footer <type>(<scope>): <subject><body><footer>Header是必需的&#xff0c;Body和Footer则可以省略 1.1 Header Type&#xff08;必需&#xf…...

【机试题】LazyIterator迭代器懒加载问题

将下面这个未完成的Java工具类补充完成&#xff0c;实现懒加载的功能&#xff0c;该类需要实现Iterable接口&#xff0c;能够遍历所有数据。具体要求如下&#xff1a; 工具类提供了一个ValueLoader接口&#xff0c;用于获取数据&#xff0c;其中ValueLoader的接口定义为&#x…...

【面试经典150 | 位运算】位1的个数

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;循环检查二进制位方法二&#xff1a;位运算优化方法三&#xff1a;__builtin_popcount() 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…...

vue中数据代理和事件处理

数据代理 直接在对象下可直接修改属性的值&#xff0c;而Object提供defineProperty()对属性进行控制 <script>let perosn {name: 小蜜,sex: 男,//age: 19 }Object.defineProperty(perosn,age,{value: 19//enumerable: true ,添加enumerable将默认值改为true&#xff0c…...

Unity之NetCode多人网络游戏联机对战教程(8)--玩家位置同步

文章目录 前言添加相机玩家添加对应组件服务端权威&#xff08;server authoritative&#xff09;客户端权威&#xff08;client authoritative&#xff09;服务端同步位置阅读与理解PlayerTransformSync.csNetworkVariableUploadTransformSyncTransform 后话 前言 承接上篇&a…...

spring boot 中@Value读取中文配置时乱码

1.spring boot 读取application.properties 该文件是iso8859编码 如果是直接写中文 读取时会乱码 显示成?? 必须得转ascii码才能正常显示 其他方法测试也不行 Value("${apig.order.tiaokong.qianzi}") private String apigOrderTiaokongQianzi;...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...