我正在使用 MemoryCache
在我的 MVC .Net 应用程序中存储键/值对。
我使用 MemoryCache
有两个主要目的。一种是存储用户 ID 的 session ,另一种是存储常量(这只是一个示例)理论上,这两种情况下的键可能相同,所以我想要一些方法来分离这两个。
我正在考虑 2 或 3 种方法。哪种方式更优越?或者有更好的选择吗?
缓存中的每个键都将以命名空间为前缀。
"user_session:1", "user_session:2"
"constants:1", "constants: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.
每个“命名空间”都有自己的 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/