10. Resistencia RDB

Creación y carga de archivos RDB

La instrucción SAVE bloqueará el proceso del servidor Redis hasta que se cree el archivo RDB. Durante el bloqueo del proceso del servidor, el servidor no puede procesar ninguna solicitud de comando.

El comando BGSAVE generará un proceso hijo, que es responsable de crear el archivo RDB, y el proceso del servidor (proceso padre) continúa procesando la solicitud del comando.

def SAVE():
	#创建RDB文件
	rdbSave()
	
def BGSAVE():
	# 创建子进程
	pid=fork()
	
	if pid == 0:
		# 子进程负责创建RDB文件
		rdbSave()
		# 完成之后向父进程发送信号
		signal_parent()
	elif pid>0:
		# 父进程继续处理命令请求,并通过轮询等待子进程的信号
		handle_request_and_wait_signal()
	else:
		# 处理出错情况
		handle_fork_error()

Ahorro automático de intervalos

El servidor ejecuta automáticamente un BGSAVEcomando a intervalos regulares , y se pueden establecer múltiples condiciones de almacenamiento. Siempre que se cumpla cualquiera de las condiciones, el servidor ejecutará el BGSAVEcomando

save 900 1
save 300 10
save 60 10000

服务器在900秒内进行了至少1次修改
服务器在300秒内进行了至少10次修改
服务器在60秒内进行了至少10000次修改

Establecer condiciones de almacenamiento

struct redisServer
{
	struct saveparam * saveparams;
	long long dirty; //距离上一次成功执行BGSAVE之后,进行修改的次数
	time_t lastsave; //上一次成功执行BGSAVE的时间
};

struct saveparam
{
	time_t seconds;
	int changes;
}

Compruebe si se cumplen las condiciones de almacenamiento

Se ejecuta cada 100ms por defecto.serverCron()

def serverCron():
	# 遍历所有保存条件
	for saveparam in server.saveparams:
		save_interval=unixtime_now()-server.lastsave
		
		#如果数据库状态的修改次数超过条件所设置的次数
		#并且距离上次保存的时间超过条件所设置的时间
		#那么执行保存操作
		if server.dirty >= saveparam.changes and save_interval>saveparam.seconds:
			BGSAVE()

Estructura de archivos RDB

Visión general

  1. REDIS, a través de estos cinco caracteres, el programa puede verificar rápidamente si el archivo cargado es un archivo RDB al cargar un archivo
  2. db_version, registra el número de versión
  3. bases de datos, contiene cualquier número de bases de datos y sus datos de pares clave-valor.
  4. EOF, que marca el final del contenido del cuerpo del archivo RDB
  5. check_sum, checksum, comprueba si el archivo RDB es incorrecto o está dañado

bases de datos

Cada base de datos no vacía guarda tres partes:

  1. SELECTDB constante, que indica que a continuación se leerá un número de base de datos
  2. db_number, después de leer, llame al comando SELECT para cambiar la base de datos, de modo que el par clave-valor leído más tarde se pueda cargar en la base de datos correcta
  3. key_value_pairs, guarda todos los datos de pares clave-valor en la base de datos. Contiene tiempo de caducidad.

key_value_pairs

  1. TYPE registra el tipo de valor, que representa un tipo de objeto o código subyacente.
  2. la clave es siempre un objeto de cadena
  3. El valor guarda el contenido del tipo correspondiente según la instrucción TYPE
  4. EXPIRETIME_MS constante, lo que significa que un tiempo de caducidad en milisegundos se leerá más tarde
  5. ms, guarde el tiempo de caducidad del par clave-valor

Supongo que te gusta

Origin blog.csdn.net/weixin_42249196/article/details/108634882
Recomendado
Clasificación