gpt4 book ai didi

c# - ServiceStack 的 RedisTypedClient - 可以使用字符串来定义类型吗?

转载 作者:IT王子 更新时间:2023-10-29 06:12:27 27 4
gpt4 key购买 nike

我想弄清楚是否有任何方法可以创建具有 RedisTypedClient 功能但能够使用简单的定义 URN key 的 RedisClient字符串而不是传入类型。例如,目前我们正在像这样创建 IRedisTypedClient:

var redisProjectClient = _redisClientsManager.GetClient().As<Project>()

然后我们可以根据我们知道的类型存储/检索相关实体:

var files = redisProjectClient.GetRelatedEntities<File>(projectId);

但是,我们想要管理来自外部服务(由 HTTP API 端点获取)的对象的简单 JSON 负载。这些有效负载对象将是我们在 c# 中不知道的类型,但将提供我们希望能够用来管理关系的模式/类型名称,就像我们在 redis 类型的客户端中所做的那样。如果不手动管理所有使类型化客户端如此出色的额外内容,我看不出这是否可行:

  • 该类型实体的 ID 列表
  • 检索/更新与对象相关的实体的能力
  • GetNextSequence 获取下一个 Id

这些在平面 IRedisClient 中不可用,所以我想做这样的事情:

var file = "{...}" // JSON object provided by external service

// We will know it's a "Project" type with a "projectID" from the JSON payload data:

var redisProjectClient = _redisClientsManager.GetClient().As("Project");
redisProjectClient.StoreRelatedEntities("File", projectId, file);


// ...

var files = redisProjectClient.GetRelatedEntities("File", projectId);

知道这是否可行或如何创建此类客户端吗?

最佳答案

RedisTypedClient - Can you use strings to define the type?

不,Typed 客户端仅适用于类型,不适用于未知数据结构,您需要使用字符串 IRedisClient 存储任意 JSON 负载。

为了维护关系,您可以将它们存储在 Redis 集中作为 described in this previous answer这就是StoreRelatedEntities() API 在后台使用 StoreAll() 正常存储实体,但也使用 urn(例如 urn:File:x)在索引集中维护相关实体) 作为存储每个实体的标识符。

GetRelatedEntities()然后读取“关系集索引”中维护的所有 id,并使用 GetValues() 按 urns 获取所有实体。

关于c# - ServiceStack 的 RedisTypedClient - 可以使用字符串来定义类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56991676/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com