Redis 中的主要数据结构

news2024/11/20 3:18:12

Redis 提供了丰富且高效的数据结构,支持多种类型的操作,可以满足不同场景下的存储需求。以下是 Redis 中的主要数据结构及其应用场景和特点:

1. 字符串(String)

字符串是 Redis 中最基础的数据类型,所有键值最终都可以以字符串的形式存储。

  • 特点:单个字符串值最大可达 512 MB。
  • 常用命令SETGETINCRDECRAPPENDSTRLEN
  • 应用场景:计数器、简单的 key-value 存储、缓存 JSON 数据、分布式锁(通过 SETNX 实现)。

例子

SET myKey "Hello, Redis!"
GET myKey  # 返回 "Hello, Redis!"
INCR myCounter  # 将 myCounter 的值加 1

2. 列表(List)

列表是一种链表结构,可以在列表的头部和尾部快速插入和删除元素。

  • 特点:适合按照顺序存储一组元素,支持双向链表的操作。
  • 常用命令LPUSHRPUSHLPOPRPOPLRANGELLEN
  • 应用场景:消息队列(可使用 LPUSHRPOP 实现队列)、任务列表、时间序列数据存储。

例子

LPUSH myList "Redis"
LPUSH myList "is"
LPUSH myList "awesome"
LRANGE myList 0 -1  # 返回 ["awesome", "is", "Redis"]

3. 集合(Set)

集合是一种无序的集合数据结构,元素唯一且不重复。

  • 特点:Redis 会自动去重,适合存储唯一性要求的集合。
  • 常用命令SADDSREMSMEMBERSSISMEMBERSUNIONSINTER
  • 应用场景:标签系统、共同好友、去重操作、社交网络中的共同关注者。

例子

SADD mySet "apple"
SADD mySet "banana"
SADD mySet "apple"  # "apple" 已存在,不会重复添加
SMEMBERS mySet  # 返回 ["apple", "banana"]

4. 有序集合(Sorted Set)

有序集合与集合类似,但每个元素都会关联一个分数(score),Redis 根据分数自动排序。

  • 特点:可以按分数排序,适合实现排名系统。
  • 常用命令ZADDZRANGEZRANGEBYSCOREZREMZCOUNT
  • 应用场景:排行榜、延时队列、带权重的排序任务(如排行榜中用户的分数排序)。

例子

ZADD mySortedSet 100 "Alice"
ZADD mySortedSet 200 "Bob"
ZRANGE mySortedSet 0 -1 WITHSCORES  # 返回 ["Alice", 100, "Bob", 200]

5. 哈希(Hash)

哈希是一种键值对集合,适合存储对象属性(类似于 JSON 对象)。

  • 特点:每个哈希键下可以存储多个字段,适合存储对象的多属性值。
  • 常用命令HSETHGETHGETALLHDELHINCRBY
  • 应用场景:用户信息存储、配置项、对象的字段值(如用户ID、用户名、用户年龄等)。

例子

HSET user:1001 name "Alice"
HSET user:1001 age "30"
HGETALL user:1001  # 返回 {"name": "Alice", "age": "30"}

6. 位图(Bitmap)

位图是基于字符串的特殊数据结构,可以进行位操作,每个位可以存储 0 或 1。

  • 特点:使用位操作存储布尔状态,能有效节省空间。
  • 常用命令SETBITGETBITBITCOUNTBITOP
  • 应用场景:用户签到、活跃用户统计、布尔标记存储(如用户是否在线)。

例子

SETBIT user_activity 1 1  # 设置用户 1 活跃
SETBIT user_activity 2 1  # 设置用户 2 活跃
BITCOUNT user_activity  # 返回活跃用户数量

7. HyperLogLog

HyperLogLog 是一种用于基数统计的概率性数据结构,可以用极少的内存(12 KB)来估算独立元素的数量,适合大规模数据去重统计。

  • 特点:内存占用小,但会有一定误差,误差率约为 0.81%。
  • 常用命令PFADDPFCOUNTPFMERGE
  • 应用场景:UV 统计、页面访问去重、唯一性统计(比如每天有多少唯一用户访问)。

例子

PFADD myHyperLogLog "user1"
PFADD myHyperLogLog "user2"
PFCOUNT myHyperLogLog  # 返回去重后的用户数

8. 地理位置(GEO)

GEO 是 Redis 中用于存储地理位置数据的结构,支持地理坐标存储和基于位置的查询。

  • 特点:可以存储经纬度并计算位置间的距离,支持基于半径的范围查询。
  • 常用命令GEOADDGEODISTGEORADIUSGEOPOS
  • 应用场景:查找附近的用户或地点、基于地理位置的推荐系统。

例子

GEOADD myGeoSet 116.407526 39.90403 "Beijing"
GEOADD myGeoSet 121.473701 31.230416 "Shanghai"
GEODIST myGeoSet "Beijing" "Shanghai" km  # 返回两地距离

9. 流(Stream)

是 Redis 5.0 之后引入的一种消息队列数据结构,支持高效的消息存储和处理。

  • 特点:支持消息队列的生产与消费,可以用于实时数据流处理。
  • 常用命令XADDXREADXGROUPXDEL
  • 应用场景:消息队列、事件存储、实时数据处理(如日志收集、订单系统)。

例子

XADD myStream * sensor_id 1 temperature 22.5
XADD myStream * sensor_id 2 temperature 23.1
XREAD COUNT 2 STREAMS myStream 0  # 读取消息流中的数据

总结

Redis 提供的多种数据结构不仅丰富而且高效,适合多种应用场景:

  • 字符串(String):最基础的键值对数据结构,适合简单的数据存储。
  • 列表(List):适合需要有序的队列和栈操作。
  • 集合(Set):适合去重和集合运算。
  • 有序集合(Sorted Set):适合排名和排序需求。
  • 哈希(Hash):适合存储对象的属性。
  • 位图(Bitmap):适合布尔值存储,节省空间。
  • HyperLogLog:适合大规模基数统计。
  • 地理位置(GEO):适合基于地理位置的服务。
  • 流(Stream):适合实时数据流处理和消息队列。

Redis 的多种数据结构,使得它不仅仅是一个简单的键值对数据库,更是一个功能强大的内存数据存储系统,可以应用于缓存、排行榜、消息队列、实时分析等多种场景。

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

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

相关文章

实验5:网络设备发现、管理和维护

实验5:网络设备发现、管理和维护 实验目的及要求: 通过实验,掌握Cisco 路由器和交换机的IOS配置管理。自动从NTP服务器获取时间信息。能够利用TFTP服务器实现路由器和交换机配置文件的备份和恢复。同时验证CDP协议和LLDP协议的网络参数。完…

全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS编译开发说明

3、RTOS编译开发说明 3.1、RTOS SDK与TinaLinux开发环境 RTOS SDK相关代码已集成到Tina Linux开发环境,Tina Linux开发环境下的rtos子目录即为RTOS开发环境。 ├──brandy ├──bsp ├──build ├──buildroot ├──build.sh >build/top_build.sh ├──…

汽车资讯新篇章:Spring Boot技术启航

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04目录1. Alopex: A Computational Framework for Enabling On-Device Function Calls with LLMs摘要:研究背景&…

细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的方法

目录 一、DMA基础知识 1、DMA简介 (1)DMA控制器 (2)DMA流 (3)DMA请求 (4)仲裁器 (5)DMA传输属性 2、源地址和目标地址 3、DMA传输模式 4、传输数据量的大小 5、数据宽度 6、地址指针递增 7、DMA工作模式 8、DMA流的优先级别 9、FIFO或直接模式 10、单次传输或突…

review-消息中间件MQ

RabbitMQ RabbitMQ,作为当今流行的开源消息代理软件,以其卓越的可靠性、灵活性和易用性在微服务架构和分布式系统中扮演着至关重要的角色。它不仅能够确保消息在不同系统组件间的高效传递,还能通过其高级消息队列协议(AMQP&#x…

使用 .NET 创建新的 WPF 应用

本教程介绍如何使用 Visual Studio 创建新的 Windows Presentation Foundation (WPF) 应用。 使用 Visual Studio,可以向窗口添加控件以设计应用的 UI,并处理这些控件中的输入事件以与用户交互。 在本教程结束时,你有一…

【青牛科技】视频监控器应用

1、简介: 我司安防产品广泛应用在视频监控器上,产品具有性能优良,可 靠性高等特点。 2、图示: 实物图如下: 3、具体应用: 标题:视频监控器应用 简介:视频监控器工作原理是光&#x…

Android 项目依赖库无法找到的解决方案

目录 错误信息解析 解决方案 1. 检查依赖版本 2. 检查 Maven 仓库配置 3. 强制刷新 Gradle 缓存 4. 检查网络连接 5. 手动下载依赖 总结 相关推荐 最近,我在编译一个 Android 老项目时遇到了一个问题,错误信息显示无法找到 com.gyf.immersionba…

esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器

MQTT介绍 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息协议,旨在设备之间进行通信,尤其是在网络条件较差的情况下。MQTT v3.1.1 和 MQTT v5 是该协议的两个主要版本。 MQTT v3.1.1: 优点&#xff…

2、 家庭网络发展现状

上一篇我们讲了了解家庭网络历史(https://blog.csdn.net/xld_hung/article/details/143639618?spm1001.2014.3001.5502),感兴趣的同学可以看对应的文章,本章我们主要讲家庭网络发展现状。 关于家庭网络发展现状,我们会从国内大户型和小户型的网络说起&…

element ui 走马灯一页展示多个数据实现

element ui 走马灯一页展示多个数据实现 element ui 走马灯一页展示多个数据实现 element ui 走马灯一页展示多个数据实现 主要是对走马灯的数据的操作,先看js处理 let list [{ i: 1, name: 1 },{ i: 2, name: 2 },{ i: 3, name: 3 },{ i: 4, name: 4 },]let newL…

linux文件与重定向

目录 一、共识原理 二、回顾C语言文件函数 1.fopen 2.fwrite 3.fclose 三、文件系统调用 1.open 2.write 3.访问文件的本质 4.stdin&&stdout&&stderror 5.文件的引用计数 四、重定向 1.文件描述符的分配规则 2. 输出重定向 3.重定向系统调用 4.…

CS DAC的Matlab建模与电路设计

在模拟电路设计的复杂世界里,每一个细节都至关重要。Current Steering DAC作为模拟数字转换的核心组件,其设计和性能优化一直是工程师们追求的目标。 “什么是Current Steering DAC? CS DAC通过控制电流源的开关,将数字输入信号…

网络传输:网卡、IP、网关、子网掩码、MAC、ARP、路由器、NAT、交换机

目录 网卡IP网络地址主机地址子网子网掩码网关默认网关 MACARPARP抓包分析 路由器NATNAPT 交换机 网卡 网卡(Network Interface Card,简称NIC),也称网络适配器。 OSI模型: 1、网卡工作在OSI模型的最后两层,物理层和数据链路层。物…

STM32完全学习——系统时钟设置

一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟,由于内部HSI存在较大的误差,因此我们在系统完成上电初始化,之后需要将STM32的时钟切换到外部HSE作为系统时钟,那么我…

基于Java Springboot滁州市特产销售系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

H.265流媒体播放器EasyPlayer.js视频流媒体播放器关于直播流播放完毕是否能监听到

EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,无须安装任何插件,起播快、延迟低、兼容性强,使用非常便捷。 EasyPlayer.js播放器不仅支持H.264与H.265视频编码格式,也能支持WebS…

Ubuntu22.04基于ROS2-Humble安装moveit2教程(亲测)

一、安装ROS2-Humble 1、参考:Ubuntu22.04安装ROS2-humble-CSDN博客 2、确保安装完成 source /opt/ros/humble/setup.bash 方法一:二进制安装 sudo apt install ros-humble-moveit* 方法二:安装源码编译 一、卸载二进制安装包 sudo a…

SpringBoot学习记录(三)之多表查询

SpringBoot学习记录(三)之多表查询 一、多表查询概述1、数据准备2、介绍3、分类 二、内连接三、外连接四、子查询1、标量子查询2、列子查询3、行子查询4、表子查询 三、案例1、准备环境2、需求实现3、(附)数据准备 一、多表查询概…