2010-08-15 54 views
0

使用HttpCache从Web服务缓冲数据可能会遇到什么问题,而不是将相同的数据存储在数据库表中?在服务暂时不可用的假设情况下,如果服务器在此期间需要重新启动,则无法重新填充缓存。那么出于这个原因,是否可以像使用SqlServer会话状态一样持久保存缓存?使用ASP.NET HttpCache缓冲来自Web服务的数据

我读的HttpCache是​​使用Singleton模式实现的。这是否意味着在使用来自缓存的对象时应该使用Mutex?

如果缓存一方面被单独的线程更新,另一方面被另一线程读取,会发生什么?

谢谢。

回答

2

缓存机制遇到的最大问题是陈旧的数据。由于数据被缓存,所以它可以与缓存生存期一样久。在交易系统中,这是不可接受的,但是对于其他系统来说,这很好。只要了解数据的年龄。我不知道缓存是否可以持久化,但如果你想要去数据库这样做,我建议不要首先使用缓存,因为部分内容是快速内存访问到你的数据。

是的,高速缓存使用像Singleton这样的集中式内存存储。你对Mutexes的问题的答案是它取决于你的数据访问模式。大多数人使用缓存填充数据一次。如果该值超时,则缓存将它们的条目设为空,并重新填充。是的,您可以使用Mutex(或更可能是lock声明)来保护访问,以防止多个客户端竞相一次填充缓存。但海事组织更像是一个性能点而不是数据一致性点,因为很可能客户将用相同的数据重写另一个数据(同样,这取决于您的情况)。

+0

我宁可不使用缓存,但代码已经写好。有一个单独的线程在后台运行,每5分钟左右重新填充一次缓存。这是一个每月有40-100k人访问的网站。我试图确定它是否能够很好地扩展,如果线程/缓存可能会导致任何问题。 – user23048345 2010-08-15 13:56:16

+0

我想这取决于有多少台计算机正在尝试更新其缓存(如果这是场方案)。您将遇到的问题取决于缓存重新填充的方式。不幸的是,关于如何实施的深刻和肮脏的细节非常重要。 – 2010-08-15 14:25:33