免费高清大图网站,本地搬家网站建设思路,html网站建设中源代码,企业网站主页模板在文章【Redis】不卡壳的 Redis 学习之路#xff1a;从十大数据类型开始入手中我们介绍了Redis常用的10大数据类型#xff0c;这10大数据类型可并不是直接在底层通过代码实现的#xff0c;而是通过不同的底层数据结构组合起来的#xff0c;这篇我们介绍下Redis常用数据类型…在文章【Redis】不卡壳的 Redis 学习之路从十大数据类型开始入手中我们介绍了Redis常用的10大数据类型这10大数据类型可并不是直接在底层通过代码实现的而是通过不同的底层数据结构组合起来的这篇我们介绍下Redis常用数据类型的底层数据结构(∇)/
Redis数据类型的底层数据结构
SDS动态字符串双向链表压缩列表ziplist哈希表hashtable跳表skiplist整数集合intset快速列表quicklist紧凑列表listpack
在哪里看Redis源码
网站地址
github.com/redis/redis
Redis根目录下src文件夹
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存、分布式、可选持久性的键值对Key-Value存储数据库并提供多种语言的API。 参考书籍推荐 源码概况
Github官网
github.com/redis/redis
Redis基本的数据结构骨架 从官网可以看到对于部分关键的.c文件的介绍最重要的两个dict.c 、object.c Redis数据库的实现
数据库的底层实现db.c持久化rdb.c和aof.c
Redis服务端和客户端实现
事件驱动ae.c和ae_epoll.c网络连接anet.c和networking.c服务端程序server.c客户端程序redis-cli.c
其他
主从复制replication.c哨兵sentinel.c集群cluster.c其他数据结构如hyperloglog.c、geo.c等其他功能如pub/sub、Lua脚本
详解字典数据库K-V键值对
键值对是怎样实现的
Redis是key-value存储系统 key一般都是string类型的字符串对象 value则为Redis对象redisObject 可以是字符串对象也可以是集合数据类型的对象比如List对象、Hash对象、Set对象和Zset对象
10大类型说明
传统的5大类型
StringListHashSetZSet
新的5大类型
bitmap - 实质StringhyperLogLog - 实质StringGEO - 实质ZsetStream - 实质Streambitfield - 具体看key
在Redis的逻辑中服务redisServer启动加载数据库redisDb然后去读取字典dict然后去找哈希dictht就像Java中的那句——一切皆对象在Redis中一切皆K-Vdict字典。
Redis是由C语言编写的想要深入了解Redis的数据结构就不得不简单介绍下C语言的文件类型因为接下来我们需要在一堆源码中找到我们需要的文件和struct结构体学习数据类型的底层实现。
在C语言中源代码文件通常以“.c”作为后缀名以表示该文件包含C语言源代码。例如如果编写一个名为“qin.c”的程序那么它的源代码将保存在名为“qin.c”的文件中。C语言的头文件通常以“.h”作为后缀名库文件通常以“.lib”或“.a”作为后缀名可执行文件通常以“.exe”或“.out”作为后缀名。C语言的结构体需要使用 struct 语句来定义struct 语句定义了一个包含多个成员的新的数据类型struct 语句的格式如下
struct [structure tag] { member definition; member definition; ... member definition; } [one or more structure variables];
structure tag 是可选的每个 member definition 是标准的变量定义在结构定义的末尾最后一个分号之前可以指定一个或多个结构变量是可选的举个方便大家理解
struct Books { char title[50]; char author[50]; int book_id; } book;
了解这些基础的内容以后接下来我们就开始深入到Redis数据结构底层的C语言进行源码分析
(∇)/