我想在Redis sorted set上進行詞典範圍搜索,但基於我對這個功能的工作原理的理解,獲得了不一致的結果。當使用ZRANGECOUNT
,ZRANGEBYLEX
和ZREMRANGEBYLEX
時,結果相似。Redis詞典搜索範圍搜索不一致
工作查詢
這是我定的3個元素只是用ZRANGE
的例子。
redis> ZRANGE myset 0 -1
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
我也可以按字典順序得到所有的元素。
redis> ZRANGEBYLEX myset - +
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
通過捨棄最後3個字符來進行範圍搜索也能按預期工作。
redis> ZRANGEBYLEX myset [00000000022xm26hax [00000000022xm26hax\xff
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
調整範圍參數我也可以只選擇前兩個元素。
redis> ZRANGEBYLEX myset [00000000022xm26hax001 [00000000022xm26hax002\xff
0 00000000022xm26hax001
1 00000000022xm26hax002
短的啓動似乎是可以接受的:
redis> ZRANGEBYLEX myset [00000000022x [00000000022xm26hax001\xff
0 00000000022xm26hax001
問題查詢
我遇到問題但是當我嘗試使用的一個較短的版本來選擇字符串 - 這些都返回結果,當我期望他們返回。
ZRANGEBYLEX myset [00000000022xm26h [00000000022xm26h\xff
ZRANGEBYLEX myset [00000000022x [00000000022x\xff
但是,只加回「m」使得它再次返回所有三個元素。
redis> ZRANGEBYLEX myset [00000000022xm [00000000022xm\xff
0 00000000022xm26hax001
1 00000000022xm26hax002
2 00000000022xm26hax003
有人可以解釋這種行爲嗎?給出我的示例數據集,找回以"00000000022x"
開頭的所有元素的正確方法是什麼?
爲什麼ZRANGEBYLEX myset [00000000022x [00000000022x\xff
不會返回結果,而是ZRANGEBYLEX myset [00000000022xm [00000000022xm\xff
會返回所有結果 - 只需添加「m」似乎可以使其按預期工作?