dot Redis 8 现已发布——它是开源的

了解更多

一种数据结构是一种有组织的数据集合。它是用于以特定目的存储数据的独特格式。它用于方便地访问和管理数据。数据结构是一种在计算机中组织和存储数据的技术手段,以便我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域有着广泛多样的应用范围。

Redis 数据结构是专为开发者设计的,与简单的键值数据存储不同,它为现代应用中的多种用例提供了灵活的数据建模方式。Redis 精巧的数据结构使您能够用更少、更优雅的代码行来开发应用,存储、访问和使用您的数据,并实现强大而快速的内存处理。

这些数据结构避免了每次数据库操作时,应用程序对象与数据库实体之间进行转换相关的开销。

字符串 (Strings)

Redis 字符串 (Strings) 是 Redis 最通用的构建块之一,是一种二进制安全的数据结构。字符串是一种字节(或字)的数组数据结构,它使用某种字符编码存储一系列元素,通常是字符。它可以存储任何数据——字符串、整数、浮点数、JPEG 图像、序列化的 Ruby 对象,或您想让它携带的任何其他内容。您可以操作整个字符串或部分字符串,并对整数和浮点数进行增减。

将 Redis 用作应用缓存的 15 个理由

集合 (Sets)

Redis 集合 (Sets) 数据结构存储一组唯一的成员。使用集合,您可以添加、获取或移除成员,检查成员资格,或检索随机成员。通过排序算法,您还可以执行集合操作,如交集、并集和差集,并计算集合的基数。

使用 Redis 实现推荐功能指南

有序集合 (Sorted Sets)

Redis 有序集合 (Sorted Sets) 包含一组唯一的成员,这些成员按浮点分数排序。与集合一样,您可以添加、获取或移除单个成员,并执行集合操作,如并集、交集、差集,并计算基数。此外,您还可以根据分数或成员值查询集合,聚合、过滤和排序结果。

使用 Redis 实现实时个性化

列表 (Lists)

Redis 列表 (Lists) 按插入顺序存储字符串元素的集合。您可以从两端推入或弹出元素,根据偏移量进行裁剪,读取单个或多个元素,或按值和位置查找或移除元素。您还可以进行阻塞调用以进行异步消息传输。

适用于快速数据摄取的 Redis

哈希 (Hashes)

Redis 哈希 (Hashes) 是一种数据类型,表示字符串字段和字符串值之间的映射。Redis 哈希结构存储一组字段-值对,其设计不占用太多空间,使其非常适合表示数据对象。它提供了添加、获取或移除单个项,获取整个哈希,或将哈希中的一个或多个字段用作计数器的能力。

使用 Docker 创建和部署 Redis 容器

位图 (Bitmaps)

Redis 位图 (Bitmaps) 是一种紧凑的数据结构,用于存储二进制逻辑和状态。它提供了在给定位置获取和设置位值,以及在多个位图键之间执行 AND、OR、XOR 和 NOT 操作的命令。

使用微服务使会话存储更智能

位域 (Bitfields)

位域 (Bitfields) 提供了一种高效、紧凑的方式,可在单个数组中实现多个计数器。它允许在给定位置对计数器进行增减,并在计数器达到上限时标记溢出。

HyperLogLog

Redis HyperLogLog 是一种概率性数据结构,用于在恒定的内存大小下计数唯一值(集合基数)。您可以在内存效率高的情况下添加和计数大量唯一项,并将两个或多个 HyperLogLog 数据结构合并为一个。

Redis HyperLogLog:深入探讨

地理空间索引 (Geospatial indexes)

地理空间索引 (Geospatial indexes) 提供了一种极其高效简单的方式来管理和使用 Redis 中的地理空间数据。您可以添加具有纬度和经度的唯一项,计算对象之间的距离,并在给定位置半径范围内查找成员。

适用于地理空间数据的 Redis

流 (Streams)

Redis 流 (Streams) 是一种极其强大的数据结构,用于管理高速数据流(如消息队列)。凭借开箱即用的分区、复制和持久化功能,它能够以亚毫秒级的延迟捕获和处理每秒数百万个数据点。Redis Streams 基于高效的基数树实现(一种算法,其中每个唯一子节点与其父节点合并),这使得范围查询和查找查询速度极快。它通过异步调用连接生产者和消费者,并支持消费者组。

教程:如何使用 Redis 流构建应用

常见问题

如何在 Redis 中存储树形结构? plus-white minus-white

可以使用 Redis HASH 和 LIST 数据结构表示树。Redis 不支持嵌套数据结构,因此您需要将数据和父属性表示为 Redis HASH,将子属性表示为 Redis LIST。

Redis 如何存储列表? plus-white minus-white

通常,列表只是一系列有序元素的序列:10, 20, 1, 2, 3 是一个列表。但是使用数组实现的列表的属性与使用 *链表* 实现的列表的属性非常不同。Redis 列表通过链表实现,这意味着即使列表中有数百万个元素,在列表头部或尾部添加新元素的操作也是 *在常数时间内* 完成的。使用数组实现的列表通过索引访问元素非常快(常数时间索引访问),而使用链表实现的列表则不那么快(其中操作所需的工作量与访问元素的索引成比例)。
Redis 列表使用链表实现,因为对于数据库系统来说,能够快速向一个很长的列表中添加数据元素至关重要。

Redis 如何处理任务队列? plus-white minus-white

在处理来自 Web 客户端的请求时,有些操作执行所需的时间比我们当时想花的时间要长。Redis 可以通过将要执行的任务信息放入队列来延迟这些操作,这些任务可以稍后处理。这种将工作推迟给任务处理器的方法称为任务队列

Redis 可以支持“先进先出”(FIFO)、“后进先出”(LIFO) 和优先级队列。对于基于列表的队列,Redis 可以处理每个队列单次调用、每个队列多次回调以及简单优先级。

我可以使用 Redis 进行向量搜索吗? plus-white minus-white

向量字段允许您在搜索命令中使用向量相似性查询。向量相似性使您能够加载、索引和查询存储为 Redis 哈希字段的向量。

Redis 支持链表吗? plus-white minus-white

链表提供了高效的节点重排能力和顺序节点访问方法,并且链表的长度可以通过添加和删除节点进行灵活调整。链表在 Redis 中被广泛使用。例如,List 的底层实现就是链表。当 List 包含大量元素或列表中的元素都是较长的字符串时,Redis 将使用链表。

Redis 数据类型有哪些? plus-white minus-white

Redis 支持字符串、哈希、列表、集合和有序集合。