Redis设计与实现-复制

概述在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则称为从服务器(slave)。假设现在有两个Redis服务器,地址分别为127.0.0

Redis设计与实现-客户端

概述Redis服务是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。通过使用IO多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式来处理命令请求,并与多个客户端

Redis设计与实现-事件

概述Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:1、文件事件(file event):Redis服务器通过对套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并

Redis设计与实现-AOF持久化

概述除了RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。举个例子,如果我们对空白的数据库执行以下命令,那么数据库中将包含三

Redis设计与实现-集群

Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。节点一个Redis集群通常由多个节点组成,在刚开始的时候,每个节点都是相互独立的,它们都处于一个只包含自己的集群当中,要组建一个真正可工作的集群,我们必须将各个独立的节点连接起

Redis设计与实现-RDB持久化

Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态。因为Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将存储在内存中的数据库状态保存到

Redis设计与实现-数据库

服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组中的每个项都是一个redis.h/redisDb结构,每个redisdb结构代表一个数据库。dbnum属性的值由服务器配置的database选项决定,默认情况下,该选项的值为

Redis设计与实现-对象

Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都用到了至少一种我们前面介绍的数据结构。通过这五种不同类型的对象,Redis可以在执行命令之前,根据对象的类型来

Redis设计与实现-数据结构与对象

简单动态字符串Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。在Redis里面,C字符串只会作为字符串字面量(st

Redis实现缓存一致性的原理深度解析

首先要明白,缓存和数据库数据之间没有绝对的一致性,如果要绝对一致,那就不能使用缓存,我们只能保证数据的最终一致性,以及尽量保证缓存不一致的时间最短。另外,为了避免极端条件下造成的缓存与数据库之间的数据不一致,缓存需要设置一个失效时间。时间到了,缓存自动被清理,这样才能达到缓存和数据库数据的“最终一致