在Redis中如何进行包含搜索?

4
2个回答

0

如果您只想在哈希键中搜索,可以使用HSCAN遍历哈希的所有字段,这也会返回值。然后在客户端测试该值。或者,您可以将此逻辑移动到Lua脚本以在Redis服务器端执行。

如果您想在所有键中搜索,请考虑以下内容:

  • 您需要使用SCAN逐个遍历整个键空间。
  • 根据类型,在键内执行搜索。
  • 集合和有序集合可以使用SSCAN和ZSCAN进行值搜索,使用MATCH选项。
  • 对于所有其他类型,您需要自己进行搜索。

同样地,您可以在Lua脚本中实现上述功能,以获得更高效的实现。这个答案可以帮助您入门。


我使用了以下命令来获取所有的值。HSCAN users:hash 0 MATCH user:*。但在我的情况下,我将有嵌套的集合。请参见图片,我会在对象内部拥有countries集合。我该如何遍历并找到价值? - Jeeva J
您可以考虑安装RedisJSON,或者使用Lua CJSON在Lua中查看值。CJSON库已经在Redis中可用,请参见https://stackoverflow.com/questions/59822193/what-version-release-of-lua-and-external-libraries-are-used-in-redis - LeoMurillo

0
如果你正在使用C#的StackExchange.Redis,可以像这样做。请注意,如果Redis版本支持,服务器的Keys命令将使用SCAN(自2.8.0版本起可用)。
    public RedisKey[] GetKeysByPattern(string pattern)
    {
        var keyList = new List<RedisKey>();
        var servers = _redisConnection.GetServers();

        // search across all servers for keys
        foreach (var server in servers)
        {
            if (!server.IsConnected) continue;

            // default db (-1)
            var keys = server.Keys(-1, pattern);

            if (!keys.Any()) continue;

            keyList.AddRange(keys);
        }

        return keyList.ToArray();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接