redis-HSCAN只能匹配“;“第一级”;

redis-HSCAN只能匹配“;“第一级”;,redis,Redis,我使用Redis和散列来索引文件系统中的实际路径,例如: HSET example "/dir" "some value" HSET example "/dir/sub-dir" "some value" HSET example "/dir/sub-dir-2" "some value" HSET example "/dir/sub-dir/sub-sub-dir&

我使用Redis和散列来索引文件系统中的实际路径,例如:

HSET example "/dir" "some value"
HSET example "/dir/sub-dir" "some value"
HSET example "/dir/sub-dir-2" "some value"
HSET example "/dir/sub-dir/sub-sub-dir" "some value"
HSET example "/dir/sub-dir/another-sub-sub-dir" "some value"
现在我需要得到“目录的内容”。我已尝试使用
HSCAN

HSCAN example 0 MATCH "/dir/*"
但有了这个,我得到了这个目录中的所有路径,但我应该只得到:

/dir/sub-dir
/dir/sub-dir-2

有没有可能通过匹配模式来实现这一点?

AFAIK,不,Redis的模式匹配类似于glob,这是不允许的

不过,您可以使用服务器端来实现此目的,可能类似于:

本地密钥=密钥[1]
本地电流=ARGV[1]
本地路径=ARGV[2]
本地模式=路径..'*'
本地plen=string.len(模式)
本地r=redis.call('HSCAN',key,cur',MATCH',pattern)
本地rlen=#r[2]
当rlen>0时
局部f=r[2][rlen-1]
如果string.find(f,“/”,plen),则
--删除字段和值
对于i=0,1 do
表.删除(r[2],rlen)
rlen=rlen-1
结束
其他的
rlen=rlen-2
结束
结束
返回r
~/work/redis io主机*15:59:55
❯ redis cli--eval/tmp/hscanfirstlv.lua示例,0“/dir/”
1) "0"
2) 1)“/dir/sub dir”
2) “一些价值”
3) “/dir/sub-dir-2”
4) “一些价值”
执行示例:

$ cat myscript.lua | redis-cli SCRIPT LOAD -x
"4a95e1a03bfeeb1cb9e433862dce47b63981fbdc"
$ redis-cli EVALSHA "4a95e1a03bfeeb1cb9e433862dce47b63981fbdc" 1 example 0 "/dir/"
1) "0"
2) 1) "/dir/sub-dir"
   2) "some value"
   3) "/dir/sub-dir-2"
   4) "some value"

可以使用Lua脚本进行更高级的模式匹配。查阅参考资料。您应该将模式替换为:
/dir/[^\/]*$
,并调用
HSCAN
,而不是
SCAN