【问题标题】:Can null be inserted into Cache?可以将null插入Cache吗?
【发布时间】:2012-05-09 19:50:29
【问题描述】:

我在我的 ASP.NET 网站中积极使用缓存。

虽然,从 db 请求的某些对象确实不存在。例如,我通过在ProductsDiscount 表中查看ProductId=@ProductId 的记录来检查特定产品是否有Discount。没有记录意味着没有折扣。

您认为将null 折扣对象放入缓存是否是个好主意?

或者我最好发明一些更好的东西(例如使用空对象模式)。事实上,我不太喜欢开始使用空对象模式的想法,因为它需要进行大量的重新设计,我至少现在想避免这种情况。

谢谢。欢迎任何想法。

附:事实上,当我尝试调用时,我什至无法将空对象放入缓存中:

HttpContext.Current.Cache.Insert("name...", null);

我收到:

值不能为空。

附言为什么 MSDN 对这种行为只字未提?

【问题讨论】:

    标签: c# asp.net caching design-patterns null-object-pattern


    【解决方案1】:

    对于您的情况,您可以使用 DBNull.Value 作为“无数据”标记:

    HttpContext.Current.Cache.Insert("name...", DBNull.Value);
    

    【讨论】:

    • 是的,我需要使用“其他”作为无数据标记...没有更好的选择。谢谢。
    【解决方案2】:

    不,您不能在缓存中放置空值,这有什么意义?如果折扣是一个数值,那么缺少折扣(表中为空)实际上表示折扣为 0% - 那么为什么不存储 0?

    【讨论】:

    • 好吧,我们可以争论“如何存储折扣”,但这只是一个特例。我对解决方案更感兴趣,知道对 DB 的请求已经完成(并且 DB 中没有记录)并且没有目的提出另一个请求。
    • 在这种情况下,我会存储诸如占位符之类的内容来指示空值或已执行操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多