You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用StackExchange.Redis批量逐键检查Key是否存在?

StackExchange.Redis逐键检查键存在性的方案

如果你想批量检查多个键是否存在,同时得到每个键的存在状态(而非仅统计总数),可以用以下两种简便方法:

方法一:用Lua脚本批量处理(推荐)

Redis的EXISTS命令支持传入多个键,但原生返回的是存在的键的总数。通过Lua脚本可以一次性查询所有目标键的状态,返回每个键的存在标记,全程无需获取键的完整值,而且只需要一次网络请求,性能最优。

示例Lua脚本:

local result = {}
for _, key in ipairs(KEYS) do
    table.insert(result, redis.call('EXISTS', key))
end
return result

对应的C#调用代码:

// 定义要检查的键数组
var targetKeys = new RedisKey[] { "user:1001", "order:2003", "product:4005" };
// Lua脚本内容
var checkScript = @"local result = {} for _, key in ipairs(KEYS) do table.insert(result, redis.call('EXISTS', key)) end return result";
// 执行脚本并获取结果
var rawResults = (RedisResult[])db.ScriptEvaluate(checkScript, targetKeys);
// 转换为Dictionary<string, bool>格式
var keyExistsDict = targetKeys
    .Zip(rawResults, (key, res) => new { Key = key.ToString(), Exists = (int)res == 1 })
    .ToDictionary(item => item.Key, item => item.Exists);

方法二:批量调用KeyExists(适合少量键)

如果需要检查的键数量不多,也可以直接循环调用IDatabase.KeyExists(或异步版本KeyExistsAsync),逐个获取状态后组装成字典。不过这种方式会产生多次网络请求,键数量多的时候性能不如Lua脚本。

示例代码:

var targetKeys = new List<string> { "user:1001", "order:2003", "product:4005" };
var keyExistsDict = new Dictionary<string, bool>();
foreach (var key in targetKeys)
{
    keyExistsDict[key] = db.KeyExists(key);
}

内容的提问来源于stack exchange,提问作者Marco Slanzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 16:22:39