Skip to content

LoadAof疑问 #242

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
yzcgg opened this issue Mar 16, 2025 · 2 comments
Open

LoadAof疑问 #242

yzcgg opened this issue Mar 16, 2025 · 2 comments

Comments

@yzcgg
Copy link

yzcgg commented Mar 16, 2025

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), 为什么底下还要重新处理一遍? 注释我也没太看懂. 希望老师解答.

@HDT3213
Copy link
Owner

HDT3213 commented Mar 16, 2025

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

@IrvingOS
Copy link
Contributor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants