redis - 查看字符串是否包含一组键中的任何键

时间:2014-08-06 15:18:27

标签: redis

我有一组字符串,我打算将它存储在redis集中。我想要做的是检查主题字符串(例如S1)中是否存在任何这些字符串[s]。

我在redis中读到SSCAN,但它允许我搜索是否有任何set成员匹配模式。我想要相反的方式。我想检查是否有任何模式匹配我的字符串。这可能吗?

2 个答案:

答案 0 :(得分:1)

您无法做什么,但如果您的计划是匹配前缀,例如在自动填充中,您可以查看已排序的集和ZRANGEBYLEX。你可以看看this example。即使它现在不起作用,the code is very simple

答案 1 :(得分:0)

有几种方法可以做到这一点,这取决于你想要的方式。 SSCAN是一种完全合法的方法,您可以在客户端进行处理,也可以通过网络进行处理。根据您的要求,这可能是也可能不是一个好的选择。

相反的方法是让Redis为您或尽可能地为您节省带宽,延迟和客户端CPU。当然,折衷是让Redis' cpu这样做可能会影响性能。

在让Redis完成工作时,请先了解您所描述的功能不包含在其中。因此,您需要构建自己的内容,并且这取决于您的具体用例(例如sS1有多大,S1也是可索引的,...)。如果没有这些信息,很难做出准确的建议,但天真的(我的)方法是使用Lua来完成工作。脚本的逻辑应检查S1sSISMEMBER存在的所有排列,或者s&#39的所有排列模式匹配;成员S1

如果设置了一些假设/规则,这个解决方案当然有很大的优化空间。

编辑:@Soveran指出,排序集和ZLEX *的东西也可能对这种事情有好处。为了增加他的榜样和进一步的灵感,请参阅here for a reversed version并考虑可能性:)我仍然无法理解某人如何在Redis中实施FTS!