前情提要:
《redis 从0到1完整学习 (一):安装&初识 redis》
《redis 从0到1完整学习 (二):redis 常用命令》
《redis 从0到1完整学习 (三):redis 数据结构》
《redis 从0到1完整学习 (四):字符串 SDS 数据结构》
《redis 从0到1完整学习 (五):集合 IntSet 数据结构》
《redis 从0到1完整学习 (六):Hash 表数据结构》
《redis 从0到1完整学习 (七):ZipList 数据结构》
《redis 从0到1完整学习 (八):QuickList 数据结构》
《redis 从0到1完整学习 (九):SkipList 数据结构》
《redis 从0到1完整学习 (十):RedisObject 数据结构》
上一节整体讲了 RedisObject 的数据结构,能灵活地处理不同类型和大小的数据,本文主要介绍 RedisObject 是如何管理 String 类型的数据结构的。
Redis 源码可以点击这里下载,方便查看其中定义的一些数据结构。
上篇讲过 Redis 使用一种名为 redisObject 的数据结构来管理所有类型的值,包括 String 类型,具体可参考 《redis 从0到1完整学习 (十):RedisObject 数据结构》。每个存储在 Redis 中的值都由一个 redisObject 结构体表示,数据结构回忆一下:
对于 String 类型的数据,基于 SDS 实现,存储上限为512MB,SDS 数据结构可参考《redis 从0到1完整学习 (四):字符串 SDS 数据结构》,放张图回忆下 SDS 的数据结构:
len
表示字符数组真实的长度(不包含\0)alloc
表示已经分配的大小(不包含\0),len <= allocflags
用来控制 SDS 的 Header 大小那么 redisObject 管理 String 类型的数据,各个数据结构字段如下:
把上面解释的文字转换成图,如下:
《redis 从0到1完整学习 (一):安装&初识 redis》
《redis 从0到1完整学习 (二):redis 常用命令》
《redis 从0到1完整学习 (三):redis 数据结构》
《redis 从0到1完整学习 (四):字符串 SDS 数据结构》
《redis 从0到1完整学习 (五):集合 IntSet 数据结构》
《redis 从0到1完整学习 (六):Hash 表数据结构》
《redis 从0到1完整学习 (七):ZipList 数据结构》
《redis 从0到1完整学习 (八):QuickList 数据结构》
《redis 从0到1完整学习 (九):SkipList 数据结构》
《redis 从0到1完整学习 (十):RedisObject 数据结构》
欢迎关注本人,我是喜欢搞事的程序猿; 一起进步,一起学习;
也欢迎关注我的wx公众号:一个比特定乾坤