gpt4 book ai didi

Redis 查找匹配字符串的模式键

转载 作者:IT王子 更新时间:2023-10-29 06:13:20 24 4
gpt4 key购买 nike

我知道 Redis 有 MATCH 作为 SCAN 的一部分(详见 here )以查找与 glob 样式模式匹配的键(即 sub .domain.com 可以从 scan 0 MATCH *.domain.com)

返回

我的问题是是否有办法执行反向操作。如果我的键 glob 样式模式(即 *.domain.com 是键之一)我如何搜索以查看哪些键具有匹配 sub 的模式.domain.com?

一个想法是使用 EVAL 编写一个 Lua 脚本来执行此操作,但我认为这会占用大量资源吗?还有其他方法可以解决这个问题吗?


为了让事情更清楚一些,这里有一些示例键(用逗号分隔)(我现在不打算担心这些值,因为它们并不真正适用于这个问题)、查询和响应我希望查询生成:

键:*img.myserver.com**.mywebsite.com**www.example.com/images*

查询 -> 预期响应(匹配键)

扫描 0 REV-MATCH https://img.myserver.com/myimg.jpg -> *img.myserver.com*

扫描 0 REV-MATCH http://www.myserver.com/otherimg.jpg -> 没有匹配

扫描 0 REV-MATCH http://www.mywebsite.com/blah/blah.jpg -> *.mywebsite.com*

扫描 0 REV-MATCH https://www.example.com/images/old/a.jpg -> *www.example.com/images*

REV-MATCH(反向匹配)是一个不存在的函数 - 但我希望可以通过其他方式找到类似的功能。如果两个键具有在某些情况下可以匹配相同字符串的 glob 模式,则可能存在多个匹配项(但是,在我的用例中,这不会发生,因为我始终确保 glob 模式永远不会重叠)

最佳答案

除非我错了,否则我认为您想多了。 GET *.domain.com(即将“sub”替换为“*”)应该可以做到。如果未找到,则继续 GET *.com,依此类推,直到以 GET * 结束,这应该是所有事物的“根”。


更新的答案

好的,我明白了。所以,不,SCAN 不是正确的方法,但我知道您至少可以尝试另外两条路径。如果您遇到任何死胡同,请大声喊叫或提出一个新问题;)

有序集和字典范围的路径

转到 https://redis.io/topics/indexes#lexicographical-indexes并阅读(可能需要多次迭代,我建议实际阅读整篇文章)。然后,根据您的要求,请记住您可以通过在另一个 Sorted Set 中存储(和搜索)反向来进行后缀匹配。

RediSearch 路径

看看http://redisearch.io ,一个实现完整搜索引擎的 Redis 模块(包括自动完成功能(tm))。

免责声明:我在 Redis Labs 工作,这里是开源 Redis 的发源地,也是利用它的商业解决方案提供商,包括上述模块(开源,AGPL 许可)。

关于Redis 查找匹配字符串的模式键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45382582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com