如何在Redis中进行contains搜索?

hrysbysz  于 7个月前  发布在  Redis
关注(0)|答案(2)|浏览(96)

我是Redis缓存实现的新手。我想在所有键中搜索值。值可能是也可能不是列表的嵌套集合。我应该使用什么命令来搜索数据?https://github.com/antirez/redis/issues/6802
我在.net core. https://github.com/StackExchange/StackExchange.Redis中实现了同样的功能。


的数据

ttp71kqs

ttp71kqs1#

如果你只是想像截图中那样在一个哈希键中搜索,你可以使用HSCAN遍历哈希的所有字段,这也会返回值。然后在客户端测试值。或者,你可以将这个逻辑移动到Lua script来在Redis服务器端完成。
如果要在所有键中搜索,请考虑以下内容:

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

同样,您可以在Lua脚本中实现上述内容以获得更有效的实现。这个答案可以让您开始。

clj7thdc

clj7thdc2#

如果你使用的是C#StackExchange.Redis,就像这样。请注意,如果Redis版本支持SCAN,服务器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();
    }

字符串

相关问题