redis(一) 基本数据结构
发布日期:2021-04-30 21:09:42 浏览次数:121 分类:精选文章

本文共 1400 字,大约阅读时间需要 4 分钟。

Redis(一) 基本数据结构

Redis 是一个开源的基于内存或持久化的网络字典服务,支持多种语言的 API。它以其高性能和灵活性著称,广泛应用于缓存和高并发数据存取场景。Redis 的核心特点在于其丰富的键值数据类型和灵活的存储机制。


Redis 的魅力

缓存可以分为两类:一种是应用内缓存(如 Map 或 EH Cache),另一种是专门的缓存组件(如 Memcached 或 Redis)。Redis 不仅提供了简单的键值存储功能,还支持多种数据类型,适合不同场景下的需求。它通过灵活的键值对和丰富的数据类型,成为高性能存储系统的首选工具。


Redis 中的数据类型

Redis 提供多种键值数据类型,每种类型适用于不同的场景。以下是常见的几种数据类型及其实现细节。


1.1 字符串类型

字符串类型是 Redis 中最基础的数据类型,能够存储任意形式的字符串,包括二进制数据、JSON 对象甚至图片内容。一个字符串键可以存储最大 512 MB 的数据。

字符串的内部实现

Redis 内部通过 intsds(简单动态字符串)来存储字符串数据。int 用于存储整型数据,而 sds 用于存储字节、字符串和浮点型数据。sds 是 C 标准字符串结构的封装,旨在提升操作性能并利用 C 标准库。

Redis 3.2 引入了 sdshdr 类型,用于优化内存使用。通过细分 sdshdr 的类型(如 sdshdr8sdshdr16 等),Redis 可以根据实际需要选择最适合的内存分配策略,从而节省内存开销。


1.2 列表类型

列表类型 (list) 在 Redis 3.2 之前使用 ziplistlinkedlist 实现。ziplist 适用于元素个数和单个元素长度都较少的情况,通过压缩列表存储连续内存块,提高存储效率。linkedlist 则以双向列表形式存储,插入操作复杂度低,但内存开销较大。

Redis 3.2 引入了 quicklist 数据结构,统一管理列表节点。每个节点都由 ziplist 实现,确保列表操作的高效性。


1.3 哈希类型

哈希类型 (hash) 类似于散列表,存储键值对。Redis 中的哈希表分为三层:hash 表、链表和固定数组。数据量小时,Redis 会优先使用链表存储,数据量大时则切换为哈希表。


1.4 集合类型

集合类型 (set) 中的元素唯一且无序,允许存储最多 2^32 - 1 个元素。集合类型的核心操作(如添加、删除、查询)时间复杂度为 O(1),性能优异。

集合底层使用 intsethashtable 存储。当集合元素全为整数时,Redis 采用 intset 存储;否则,使用 hashtable 存储,值域为 NULL。


1.5 有序集合类型

有序集合类型 (zset) 在集合类型基础上增加了排序功能。每个元素关联一个分数,支持按分数范围查询或获取前 N 大或小的元素。尽管元素唯一,但分数可以重复。

有序集合的实现较为复杂,内部使用 ziplistskiplist + hashtable 结合跳跃表结构。跳跃表通过分层存储元素,确保查找和插入操作高效。


Redis 的数据类型丰富且灵活,能够满足不同场景的存储需求。通过合理选择数据类型和优化内存布局,Redis 的性能和可用性可以得到显著提升。

上一篇:上传开源项目到GitHub,原来这么简单啊
下一篇:不要再学java了,别人都在说你是傻子

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2026年06月09日 17时31分09秒