【发布时间】:2020-05-21 22:52:29
【问题描述】:
我有一个使用 .net API 和控制器过滤器的 Web 应用程序,它每次都获取令牌并从数据库中抓取用户。我试图消除相同的数据库调用,所以我使用了 MemoryCache。
public ObjectCache cache = MemoryCache.Default;
// setting it, and only calling database again if cache is empty
cache.Set("cachedUser", userFromDB, policy);
我的问题是我打开另一个浏览器并以其他用户身份登录,我可以看到第一个用户仍在调试器中缓存。是调试器范围导致这种情况发生,还是他们自己的浏览器会话中的多个用户每个都有自己的缓存对象?我不确定用户 A 是否会保持在本地缓存而用户 B 会保持在本地缓存,或者用户 A 会保持缓存而用户 B 会被误认为是用户 A。
【问题讨论】:
-
有趣,也许通过会话 ID 键入可能会有所帮助?
-
我想到了,但我可能有成千上万的用户。所以我会假设成千上万的缓存键太多了。
-
MemoryCache 存在于服务器上,它存储在内存中。如果你在 MemoryCache 中放了一些东西,它会一直留在那里直到它过期或服务器重新启动,或者你手动删除它。
-
@JohanP 那么用“user”之类的键缓存数据库用户会在多个会话中持续存在吗?您是否建议使用不同的密钥缓存每个用户?
-
@brett 另请记住,MemoryCache 用于一台服务器。如果您的应用在服务器场或多个容器中运行,它们将不会持续存在。
标签: c# asp.net .net entity-framework caching