具有模式的 ServiceStack IRedisClient ScanAllKeys 未按预期返回结果 (ServiceStack 5.7.0)

Posted

技术标签:

【中文标题】具有模式的 ServiceStack IRedisClient ScanAllKeys 未按预期返回结果 (ServiceStack 5.7.0)【英文标题】:ServiceStack IRedisClient ScanAllKeys with a pattern does not return results as expected (ServiceStack 5.7.0) 【发布时间】:2021-12-29 18:28:41 【问题描述】:

我已经使用 StackService.Redis 中的 IRedisClient 尝试了以下带有和不带有“*”通配符的代码。它不会像我预期的那样返回与模式匹配的键列表。我正在尝试搜索包含存储在 searchPattern 变量中的值但未返回任何结果的任何键。如果我遗漏了什么,请告诉我。

using var cache = BuildClient();
cacheKeyList = cache.ScanAllKeys($"*searchPattern*").Skip(skip).Take(take).ToList();

【问题讨论】:

【参考方案1】:

提供给方法的ScanAllKeys 模式是匹配的模式,而不是键所持有的值。

例如,如果您使用模式users:id 存储密钥,其中id 替换为用户的ID,例如users:1,则扫描users:* 将返回与存储的用户匹配的所有密钥。

这个方法下面是调用 Redis SCAN 命令more info can be found in their documentation。

【讨论】:

以上是关于具有模式的 ServiceStack IRedisClient ScanAllKeys 未按预期返回结果 (ServiceStack 5.7.0)的主要内容,如果未能解决你的问题,请参考以下文章

使用 ServiceStack.ORMLite 的存储库模式中的事务

具有多个数据库服务器的 ServiceStack OrmLite

如何让 ServiceStack 序列化/反序列化具有正确类型的 expando 对象

ServiceStack.Text JsonSerializer 无法反序列化其自己的序列化模式(类型定义应以 '' SerializationException 开头)

使用 ServiceStack.ORMLite 实现工作单元和存储库模式的最佳实践

责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用