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

Hen*_*hiu 7 c# asp.net asp.net-mvc memorycache

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

我使用的主要目的有两个MemoryCache.一个是存储用户id的会话,另一个是存储常量(这只是一个例子)理论上两个键在两种情况下都是相同的,所以我想用一些方法来分离这两个.

我想2或3种方法.哪种方式优越?还是有更好的选择吗?

  1. 缓存中的每个键都将由命名空间添加.

    "user_session:1","user_session:2"
    "常量:1","常量:2"

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

    将有一个键"user_sessions",其值将是一个将id映射到会话对象的Dictionary.将有一个关键的"常量",其值将是一个字典.

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

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

IE:

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

Mar*_*der 5

选择选项#3!

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

选项#2:

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

选项1:

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

  • 值得注意的是,[docs](http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.memorycache.aspx) 警告不要创建比您真正需要的更多的`MemoryCache` 实例。他们没有具体说明原因,但要记住一些事情。 (2认同)