【Redis】深入理解 Redis 常用数据类型源码及底层实现

在文章【Redis】10大数据类型概述中我们介绍了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.cobject.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大类型

  • String
  • List
  • Hash
  • Set
  • ZSet

新的5大类型

  • bitmap -> 实质String
  • hyperLogLog -> 实质String
  • GEO -> 实质Zset
  • Stream -> 实质Stream
  • bitfield -> 具体看key

在Redis的逻辑中,服务(redisServer)启动加载数据库(redisDb),然后去读取字典(dict),然后去找哈希(dictht),就像Java中的那句------一切皆对象,在Redis中一切皆K-V(dict字典)。

Redis是由C语言编写的,想要深入了解Redis的数据结构,就不得不简单介绍下C语言的文件类型📃(因为接下来我们需要在一堆源码中找到我们需要的文件)和struct结构体(学习数据类型的底层实现)。

  • 在C语言中,源代码文件通常以".c"作为后缀名,以表示该文件包含C语言源代码。例如,如果编写一个名为"qin.c"的程序,那么它的源代码将保存在名为"qin.c"的文件中。C语言的头文件通常以".h"作为后缀名,库文件通常以".lib"或".a"作为后缀名,可执行文件通常以".exe"或".out"作为后缀名。
  • C语言的结构体,需要使用 struct 语句来定义,struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:
ini 复制代码
struct [structure tag]
{
   member definition;
   member definition;
   ...
   member definition;
} [one or more structure variables];  

structure tag 是可选的,每个 member definition 是标准的变量定义,在结构定义的末尾,最后一个分号之前,可以指定一个或多个结构变量(是可选的),举个🌰方便大家理解:

ini 复制代码
struct Books
{
    char  title[50];
    char  author[50];
    int   book_id;
} book;  

了解这些基础的内容以后,接下来我们就开始深入到Redis数据结构底层的C语言进行源码分析喽~

相关推荐
C++忠实粉丝2 小时前
Redis 介绍和安装
数据库·redis·缓存
ClouGence2 小时前
Redis 到 Redis 数据迁移同步
数据库·redis·缓存
苏三说技术2 小时前
Redis 性能优化的18招
数据库·redis·性能优化
Tttian6223 小时前
基于Pycharm与数据库的新闻管理系统(2)Redis
数据库·redis·pycharm
言之。4 小时前
redis延迟队列
redis
hanbarger4 小时前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
弗罗里达老大爷5 小时前
Redis
数据库·redis·缓存
DT辰白20 小时前
基于Redis的网关鉴权方案与性能优化
数据库·redis·缓存
木子七21 小时前
Redis-十大数据类型
redis
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 天前
聊聊volatile的实现原理?
java·jvm·redis