Redis是内存数据库,它所有的数据都保存在内存里面。如果服务器宕机,服务器中的数据就会丢失。为了解决这个问题,Redis提供了持久化的功能,可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。 Redis的持久化方法分为RDB持久化和AOF持久化两种。 RDB持久化 redis中的RDB持久化方法是以数据快照的方式将某个时间点上的数据库状态保存到一个RDB文件中。 持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过这个文件可以还原生成RDB文件时的数据库状态。 这两个过程如下图: 创建…

2021年9月14日 0条评论 74点热度 2人点赞 agedcat_xuanzai 阅读全文

链表是一种常用的数据结构,因为Redis使用的C语言并没有内置这种数据结构,所以Redis构建了自己的链表实现。 链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。 链表的实现 每个链表节点使用一个 adlist.h/listNode 结构来表示: typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value; } listNode; 多个 li…

2021年9月7日 0条评论 74点热度 1人点赞 agedcat_xuanzai 阅读全文

Redis中的字符串的底层实现并没有简单的使用C语言传统的字符串表示,而是自己构建了一种名为简单动态字符串的数据结构来表示字符串。 SDS的作用主要有两个:其一是用来保存数据库中的字符串值;其二是被用作缓冲区,比如AOF模块中的AOF缓冲区以及客户端状态中的输入缓冲区。 SDS的定义 SDS结构的定义如下: struct sdshdr{ //记录buf数组中已经使用字节的数量 //等于SDS所保存字符串的长度 int len; //记录buf数组中未使用字节的数量 int free; //字节数组,用于保存字符串 …

2021年9月7日 0条评论 134点热度 2人点赞 agedcat_xuanzai 阅读全文