我有一组字符串,我打算将它存储在redis集中。我想要做的是检查主题字符串(例如S1)中是否存在任何这些字符串[s]。
我在redis中读到SSCAN,但它允许我搜索是否有任何set成员匹配模式。我想要相反的方式。我想检查是否有任何模式匹配我的字符串。这可能吗?
答案 0 :(得分:1)
您无法做什么,但如果您的计划是匹配前缀,例如在自动填充中,您可以查看已排序的集和ZRANGEBYLEX。你可以看看this example。即使它现在不起作用,the code is very simple。
答案 1 :(得分:0)
有几种方法可以做到这一点,这取决于你想要的方式。 SSCAN是一种完全合法的方法,您可以在客户端进行处理,也可以通过网络进行处理。根据您的要求,这可能是也可能不是一个好的选择。
相反的方法是让Redis为您或尽可能地为您节省带宽,延迟和客户端CPU。当然,折衷是让Redis' cpu这样做可能会影响性能。
在让Redis完成工作时,请先了解您所描述的功能不包含在其中。因此,您需要构建自己的内容,并且这取决于您的具体用例(例如s
和S1
有多大,S1
也是可索引的,...)。如果没有这些信息,很难做出准确的建议,但天真的(我的)方法是使用Lua来完成工作。脚本的逻辑应检查S1
中s
与SISMEMBER
存在的所有排列,或者s
&#39的所有排列模式匹配;成员S1
。
如果设置了一些假设/规则,这个解决方案当然有很大的优化空间。
编辑:@Soveran指出,排序集和ZLEX *的东西也可能对这种事情有好处。为了增加他的榜样和进一步的灵感,请参阅here for a reversed version并考虑可能性:)我仍然无法理解某人如何在Redis中实施FTS!