如何使用StackExchange.Redis存储未知类型的项目?

时间:2016-02-16 22:14:14

标签: c# redis stackexchange.redis

我在遗留代码库中恭维现有的缓存接口(对于Redis)(我无法将其重构为更合适),接口并未指定任何类型信息,例如:

interface ICache {
    object Get(string key);
    void Set(string key, object item);
}

使用StackExchange.Core版本1.2时,您必须在数据库中存储/检索时指定类型 - 我不会这样做。

目前我觉得我正在解决这个问题,我将所有对象存储为序列化字符串,然后根据$ type信息使用Json.net进行反序列化。

我的问题是否有更合适的解决方案,并不涉及更改界面?

1 个答案:

答案 0 :(得分:0)

不,这很酷。 Redis无论如何都可以将值存储为字符串或字节数组,至少对于普通字符串或散列。

如果您不知道预先输入的类型,则必须自己帮助自己并使用Redis中存储值的单独字段。你使用$ type字段,Newiusoft.Json生成我猜?我在哈希上使用了一个单独的字段,我存储了值,类型和其他元信息...

反序列化值时,您必须知道具体类型,并且知道这一点的唯一方法是您存储的程序集限定类型信息。

我对http://cachemanager.net使用相同的内容。

你可以优化它。没有必要始终序列化实际上需要一些性能的对象。对于标量值和字符串,您只需将值和类型信息存储在散列中,然后将其强制转换,而不是反序列化。这就是我至少做的,性能提升非常重要。 话虽如此,如果你只是存储POCO,那也没关系。