今天在解压完Redis的安装包之后,用make test 进行编译测试,发现出现了报错。
赶紧将报错信息复制下来,尝试在baidu、CSDN上搜索寻求解答,发现没有我这一种奇怪的报错信息。在开始科学上网之前,只能自己根据报错信息尝试解决。
打开string.tcl文件找到相关触发报错的内容
test {trim on SET with big value} {
# set a big value to trigger increasing the query buf
r set key [string repeat A 100000]
# set a smaller value but > PROTO_MBULK_BIG_ARG (32*1024) Redis will try to save the query buf itself on the DB.
r set key [string repeat A 33000]
# asset the value was trimmed
assert {[r memory usage key] < 42000}; # 42K to count for Jemalloc's additional memory overhead.
}
在这里可以看到这里r set key [string repeat A 33000]分配的字节大小明显是小于42000,但是为什么会发生报错呢?
追根溯源,科学上网
来到GitHub上搜索找到Redis仓库进入到Issues里面,直接进行提问,不到两个小时,得到了开发者的回复。
是因为Mac M1在执行malloc(33000)时分配了的65536字节大于42000字节,所以make test会有报错。只需要在string.tcl文件中找到相关测试并添加条件判断语句,跳过对它的测试就行了。
结束
按照大佬给的方案修改完之后,make test成功。希望本篇文章可以帮助到大家,在中文语言资料中填补上这一空白。