繁体   English   中英

C# Redis 缓存获取多个条目

[英]C# Redis Cache get multiple entries

所以我正在使用“StackExchange.Redis”,我想知道是否可以通过键模式或键列表获取多个值,以便一次访问 redis 缓存并获取我需要的所有数据。

在使用“GetObject”方法时,我已经尝试在键中使用“star”,如下所示:

User user = RedisContext.Cache.GetObject("User*");

但这会返回 null。

而且我还尝试通过确实有效的模式获取所有键,但我无法在一个 go 中获取值,如下所示:

var endpoint = RedisContext.GetConnectionMultiplexer().GetEndPoints().First();
var keys = RedisContext.GetConnectionMultiplexer().GetServer(endpoint.ToString()).Keys(pattern: "User*");
List<string> keyList = new List<string>();
foreach (var _key in keys)
{
      keyList.Add(_key);
}

List<User> users = RedisContext.Cache.GetObjectsByTag<dynamic>(keyList.ToArray());

但这给了我一个例外。 有什么我想念的吗?

您可以一举获得多个钥匙吗?

已经在这里回答了

您可以将 RedisKeys 数组传递给IDatabase object 上的StringGetStringGetAsync方法 - 从无到有查看以下示例:

var muxer = ConnectionMultiplexer.Connect("localhost");

var db = muxer.GetDatabase();

db.StringSet("foo", "bar");
db.StringSet("baz", "foo");
db.StringSet("bar", "baz");

var result = await db.StringGetAsync(new RedisKey[]{"foo","bar","baz"});

foreach (var item in result)
{
    Console.WriteLine((string)item);
}

你能一口气按图案得到所有的钥匙吗

你可以,但不应该,除非你想建立一个二级索引。 您可以编写 lua 脚本来匹配键模式,然后使用该模式拉回所有键,但这将非常低效和危险,因为您将承诺在一个操作中查看整个键空间,这是其中之一那真的可以挂一个Redis服务器。

您可以做的是创建二级索引并搜索与给定模式匹配的键。 这可以通过传统方式完成,或者您可以使用像RediSearch这样的模块来帮助您构建它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM