HDT3213/rdb

version 10 报错

tanjiaxi opened this issue · 13 comments

Got a connection, launched process /Users/t/Library/Caches/JetBrains/GoLand2023.2/tmp/GoLand/___go_build_github_com_hdt3213_rdb (pid = 5053).
error: cursor out of range
Exiting.

rbd 版本是10

可以提供 rdb 文件或更多信息吗?

redis 7.0.7 list使用gizp的时候,他的rdb文件的Entry 结尾不是按照文档上面的。170 = {uint8} 199
171 = {uint8} 253
172 = {uint8} 235
173 = {uint8} 0
174 = {uint8} 0
175 = {uint8} 0
176 = {uint8} 1
177 = {uint8} 170
178 = {uint8} 224
这里的176 是length 了,表示结束了,但是170才是实际的length,但是176为1,就表示结束了
不是这个问题,我解决了,但是后面还遇到一个问题,正在,,,,。也是list 的zip的情况

放附件里吧 hdt3213@outlook.com

redis 7.0.7 list使用gizp的时候,他的rdb文件的Entry 结尾不是按照文档上面的。170 = {uint8} 199 171 = {uint8} 253 172 = {uint8} 235 173 = {uint8} 0 174 = {uint8} 0 175 = {uint8} 0 176 = {uint8} 1 177 = {uint8} 170 178 = {uint8} 224 这里的176 是length 了,表示结束了,但是170才是实际的length,但是176为1,就表示结束了 不是这个问题,我解决了,但是后面还遇到一个问题,正在,,,,。也是list 的zip的情况

gizp? 是说 list 的编码是 ziplist 吗?

放附件里吧 hdt3213@outlook.com

稍后整理一个

放附件里吧 hdt3213@outlook.com

稍后整理一个

发你邮箱啦

收到

func readVarInt(cursor *int, l uint16) uint32 {
realLen := l + 2 //比数据大于两个长度
byteLen := lpEncodeBackLen(int(realLen)) //
*cursor += byteLen
return uint32(realLen) //或者根据byteLen实际情况解析,从右往左解析
}

func lpEncodeBackLen(l int) int {
if l <= 127 {
return 1
} else if l < 16383 { //2^{14} - 1
return 2
} else if l < 2097151 { //2^{21} - 1
return 3
} else if l < 268435455 { // 2^{28} - 1
return 4
} else {
return 5
}
}
这里可以这样呢。我看源码他是需要从右往左解析的,而我们现在是从左往右解析的。所有优点问题

已经解析成功了,等我晚上发个包