用于 2 种不同类型的键的 C# MemoryCache?

标签 c# asp.net asp.net-mvc memorycache

我正在使用 MemoryCache 在我的 MVC .Net 应用程序中存储键/值对。

我使用 MemoryCache 有两个主要目的。一种是存储用户 ID 的 session ,另一种是存储常量(这只是一个示例)理论上,这两种情况下的键可能相同,所以我想要一些方法来分离这两个。

我正在考虑 2 或 3 种方法。哪种方式更优越?或者有更好的选择吗?

  1. 缓存中的每个键都将以命名空间为前缀。

    "user_session:1", "user_session:2"
    "constants:1", "constants:2"

  2. 使用嵌套字典作为键。

    There will be a key "user_sessions" whose value will be a Dictionary that maps ids to the session object. There will be a key "constants" whose value will be a Dictionary.

  3. 每个“命名空间”都有自己的 MemoryCache 实例。

#2 的缺点是,当我想获取属于用户 ID 的值时,我需要先获取字典,然后获取该字典中某个键的值。这意味着我需要将字典存储在内存中。

即:

Dictionary<string, string> userSessions = MemoryCache.Default["user_sessions"]
object session = userSessions.get("1");

最佳答案

选择选项 #3!

  • 对于程序员来说,它更容易访问。
  • 这是最快的解决方案(参见其他解决方案的评论)
  • 这是内存效率最高的解决方案(请参阅对其他解决方案的评论)

选项#2:

  • 你自己说的。
  • 如果缓存决定删除一个键,则会删除整个字典,从而导致更多的值重新加载。

选项#1:

  • 您不必连接字符串(性能和内存)
  • 较长的键名会产生较长的比较时间。
  • 添加项目会比较慢,因为它包含两倍的键。

关于用于 2 种不同类型的键的 C# MemoryCache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16323733/

相关文章:

javascript - 在 asp.net 中检索 javascript 代码的客户端 ID 不起作用

asp.net - CSS 友好并升级到 ASP.NET 4.0

c# - 如何防止 MVC Controller 中的并发访问?

c# - VS2015 MVC 无编译经验

angularjs - 新路由将 URL 重写为默认路由,SignalR 停止连接

c# - Console.Clear() 闪烁

c# - 让柱形图在图表控件中重叠

c# - 尝试使用 TextChanged 作为事件将结果的总和相乘并放入文本框中

c# - TreeView 的 ContainerFromItem 返回 null

c# - 将 GridView 导出到 XLS --- 分页问题