mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 16:18:28 -05:00
3ca6972ecd
Part two of implementing #8702 (zset), after #8887. ## Description of the feature Replaced all uses of ziplist with listpack in t_zset, and optimized some of the code to optimize performance. ## Rdb format changes New `RDB_TYPE_ZSET_LISTPACK` rdb type. ## Rdb loading improvements: 1) Pre-expansion of dict for validation of duplicate data for listpack and ziplist. 2) Simplifying the release of empty key objects when RDB loading. 3) Unify ziplist and listpack data verify methods for zset and hash, and move code to rdb.c. ## Interface changes 1) New `zset-max-listpack-entries` config is an alias for `zset-max-ziplist-entries` (same with `zset-max-listpack-value`). 2) OBJECT ENCODING will return listpack instead of ziplist. ## Listpack improvements: 1) Add `lpDeleteRange` and `lpDeleteRangeWithEntry` functions to delete a range of entries from listpack. 2) Improve the performance of `lpCompare`, converting from string to integer is faster than converting from integer to string. 3) Replace `snprintf` with `ll2string` to improve performance in converting numbers to strings in `lpGet()`. ## Zset improvements: 1) Improve the performance of `zzlFind` method, use `lpFind` instead of `lpCompare` in a loop. 2) Use `lpDeleteRangeWithEntry` instead of `lpDelete` twice to delete a element of zset. ## Tests 1) Add some unittests for `lpDeleteRange` and `lpDeleteRangeWithEntry` function. 2) Add zset RDB loading test. 3) Add benchmark test for `lpCompare` and `ziplsitCompare`. 4) Add empty listpack zset corrupt dump test.
29 lines
978 B
Tcl
29 lines
978 B
Tcl
tags {"external:skip"} {
|
|
|
|
# Copy RDB with ziplist encoded hash to server path
|
|
set server_path [tmpdir "server.convert-ziplist-hash-on-load"]
|
|
|
|
exec cp -f tests/assets/zset-ziplist.rdb $server_path
|
|
start_server [list overrides [list "dir" $server_path "dbfilename" "zset-ziplist.rdb"]] {
|
|
test "RDB load ziplist zset: converts to listpack when RDB loading" {
|
|
r select 0
|
|
|
|
assert_encoding listpack zset
|
|
assert_equal 2 [r zcard zset]
|
|
assert_match {one 1 two 2} [r zrange zset 0 -1 withscores]
|
|
}
|
|
}
|
|
|
|
exec cp -f tests/assets/zset-ziplist.rdb $server_path
|
|
start_server [list overrides [list "dir" $server_path "dbfilename" "zset-ziplist.rdb" "zset-max-ziplist-entries" 1]] {
|
|
test "RDB load ziplist zset: converts to skiplist when zset-max-ziplist-entries is exceeded" {
|
|
r select 0
|
|
|
|
assert_encoding skiplist zset
|
|
assert_equal 2 [r zcard zset]
|
|
assert_match {one 1 two 2} [r zrange zset 0 -1 withscores]
|
|
}
|
|
}
|
|
|
|
}
|