如何在不发出多个请求的情况下从 Redis 查询某个模式的所有键值对

问题描述 投票:0回答:1

我试图从 Redis 获取给定前缀的所有键值对,而不使用 Rust 发出许多网络请求。到目前为止的答案建议使用 bash 或发出多个请求。

rust redis pipeline
1个回答
0
投票

我发现的最好的方法是使用 lua 脚本来构建响应。下面的示例不是最快的,因为我们可以使用

EVALSHA
来减少请求大小。

代码:

let raw_kv: Vec<Option<(String, Vec<u8>)>> = tokio::time::timeout(
    timeout,
    redis::cmd("EVAL")
        .arg(
            // use KEYS instead of SCAN since EVAL is already blocking
            "
    local keys = redis.call('KEYS', ARGV[1]);
    if next(keys) == nil then return keys end;
    local out = {};
    for i=1,#keys do out[i] = {keys[i], redis.call('GET', keys[i])} end
    return out;
    ",
        )
        .arg(0) // no manually passed in keys
        .arg(pattern) // custom pattern to search for
        .query_async(&mut self.conn),
)
.await;

文档:https://docs.rs/redis/latest/redis/struct.Cmd.html#method.arg

© www.soinside.com 2019 - 2024. All rights reserved.