11、redis经典五种数据类型及底层实现(1)

1、redis源码在哪里

redis-6.0.8\src

2、Redis源代码的核心部分

src源码包下面该如何查看?

2.1、Redis基本的数据结构(骨架)

① 简单动态字符串sds.c

② 整数集合inset.c

③ 压缩列表ziplist.c

④ 快速链表quicklist.c

⑤ 字典dict.c

⑥ Streams的底层实现结构listpack.c和rax.c-了解

2.2、Redis数据类型的底层实现

① Github官网说明

https://github.com/redis/redis

 

② Redis对象object.c

③ 字符串t_string.c

④ 列表t_list.c

⑤ 字典t_hash.c

⑥ 集合及有序集合t_set.c和t_zset.c

⑦ 数据流t_stream.c

2.3、Redis数据库的实现

① 数据库的底层实现db.c

② 持久化rdb.c和aof.c

2.4、Redis服务端和客户端实现

① 事件驱动ae.c和ae_epoll.c

② 网络连接anet.c和 networking.c

③ 服务端程序 server.c

④ 客户端程序 redis-cli.c

2.5、其他

① 主从复制 replication.c

② 哨兵 sentinel.c

③ 集群 cluster.c

④ 其他数据结构,如 hyperloglog.c、geo.c等

⑤ 其他功能,如pub/sub、Lua脚本

3、我们平时说redis是字典数据库KV键值对到底是什么?

3.1、一句话

redis是key-value 存储系统,其中key类型一般为字符串,value类型则为 redis对象(redisObject)

3.2、6大类型说明(粗分)

① 传统的5大类型

② 新介绍的3大类型

bitmap 实质是String

hyperLogLog 实质是String

GEO 实质是Zset

3.3、上帝视角

3.4、Redis定义了redisObject结构体来表示String、hash、list、set、zset等数据类型

3.4.1、C语 struct结构体语法简介

为了定义结构,您必须使用 struct语句。 struct语句定义了一个包含多个成员的新的数据类型 struct语句的格式如下:

struct type_name{
    member_type1 member_name1;
    member_type2 member_name2;
    member_type3 member_name3;
    .
    .
    
} object_names;

 type_name是结构体类型的名称, member_type1 member_name1是标准的变量定义,比如int i;或者 float;或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。下面是声明一个构体类Books,变量为book

struct Books{
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} book;

typedef关键字

下面是一种更简单的定义结构的方式,您可以为创建的类型取一个"别名"。例如:

typedef struct Books{
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} Books;

现在,您可以直接使用 Books来定义 Books类型的变量,而不需要使用 struct关键字。下面是实例:

Books Book1,Book2;

3.4.2、Redis中每个对象都是一个 redisObject结构

3.4.3、字典、KV是什么

每个键值对都会有一个dictEntry

3.4.4、redisObject+Redis数据类型+Redis 所有编码方式(底层实现)三者之间的关系

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值