我正在尝试确定是否可以创建具有RedisClient
功能但可以用简单字符串定义URN键而不是传递URN键的RedisTypedClient
。类型。例如,此刻我们正在像这样创建IRedisTypedClient:
var redisProjectClient = _redisClientsManager.GetClient().As<Project>()
然后我们可以根据我们知道的类型来存储/检索相关实体:
var files = redisProjectClient.GetRelatedEntities<File>(projectId);
但是,我们希望管理来自外部服务(由HTTP API端点获取)的对象的简单JSON有效负载。这些有效负载对象将是我们在c#中不知道的类型,但是将提供我们希望能够用来管理关系的模式/类型名称,就像在redis类型的客户端中一样。我看不到当前是否有可能,而不必手动管理使类型客户端如此出色的所有额外内容:
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);
是否知道这是否可行,或者如何创建这种类型的客户端?
答案 0 :(得分:1)
RedisTypedClient-您可以使用字符串定义类型吗?
没有Typed客户端仅适用于Types,而不适用于未知的数据结构,您需要使用字符串IRedisClient
存储任何任意的JSON有效负载。
要维护关系,您可以将它们存储在described in this previous answer的Redis集中,这是StoreRelatedEntities() API在后台使用StoreAll()
正常存储实体的幕后所做的,而且还可以维护使用urn(例如urn:File:x
)作为存储每个实体所依据的标识符的索引集中的相关实体。
GetRelatedEntities()然后读取维护在“关系集索引”中的所有ID,并使用GetValues()
通过骨灰盒获取所有实体。