godis icon indicating copy to clipboard operation
godis copied to clipboard

LoadAof疑问

Open yzcgg opened this issue 10 months ago • 2 comments

ret := persister.db.Exec(fakeConn, r.Args)
if protocol.IsErrorReply(ret) {
	logger.Error("exec err", string(ret.ToBytes()))
}
if strings.ToLower(string(r.Args[0])) == "select" {
	// execSelect success, here must be no error
	dbIndex, err := strconv.Atoi(string(r.Args[1]))
	if err == nil {
		persister.currentDB = dbIndex
	}
}

select命令已经注册了, 这一行就能正确处理了呀ret := persister.db.Exec(fakeConn, r.Args), 为什么底下还要重新处理一遍? 注释我也没太看懂. 希望老师解答.

yzcgg avatar Mar 16 '25 02:03 yzcgg

persister.currentDB 记录了 aof 文件当前正在写哪个 db,以避免在后续写入 aof 的过程中写错数据库。 select 命令只改变了当前写入的数据库而不改变 persister.currentDB

HDT3213 avatar Mar 16 '25 07:03 HDT3213

LoadAof 过程中会持续的遇到 select 命令,这里要做的就是记录下最后 select 的 db,这样后续的 writeAof 就不会出错写到其他 db 里去

irvingos avatar May 23 '25 08:05 irvingos