【问题标题】:How can I store items of unkown types using StackExchange.Redis?如何使用 StackExchange.Redis 存储未知类型的项目?
【发布时间】:2016-02-16 22:14:14
【问题描述】:

我在旧代码库中实现了一个现有的缓存接口(用于 Redis)(我无法将其重构为更合适),该接口没有指定任何类型信息,例如:

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

使用 StackExchange.Core 1.2 版时,您必须在从数据库存储/检索时指定类型 - 我没有。

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

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

【问题讨论】:

  • 注意:StackExchange.Redis.Extensions.Core 不直接隶属于 StackExchange.Redis。就 StackExchange.Redis 而言,我只想说:以任何方便的方式序列化您的数据,如 stringbyte[],并且:工作完成

标签: c# redis stackexchange.redis


【解决方案1】:

不,这很酷。 Redis 无论如何只能将值存储为字符串或字节数组,至少对于普通字符串或哈希而言。

如果您事先不知道类型,您必须帮助自己并在 Redis 中使用一个单独的字段来存储值。您使用 $type 字段,我猜是 Newtonsoft.Json 生成的?我在存储值、类型和其他元信息的散列上使用了一个单独的字段...

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

我对@9​​87654321@ 使用相同的。

你可以优化它。不必总是序列化实际上会消耗一些性能的对象。对于标量值和字符串,您可以只将值和类型信息存储在哈希中,然后进行强制转换,而不是反序列化它。至少我就是这样做的,性能提升非常显着。 话虽这么说,如果你只存储 POCO,也没关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 2015-10-10
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多