我的工作有数百个用户,但有100-1万条数据正在发送为每个用户的响应的Spring应用程序。 因此,表现对我们来说是一个大问题。 我们采用Java,JSP,jQuery的,HTML和CSS。 对于位我的工作,我建立一个通知系统。 例如,如果用户有有过了保质期的项目,然后我们发送通知给用户。 然而,问题是:
- 我使用jQuery / AJAX轮询服务器每分钟
- 每个查询是非常昂贵的,因为我们对成千上万的数据,每分钟为每个用户100S搜索数据库。 此外,还有数百个用户。
- 我们不检查最后修改时间,我们正在检查这个截止日期字段是否是当前时间之前。
这个想法我现在所拥有的是使用一个线程,该线程将不断检查数据库的最近更新的项目,如果有新的项目,我们更新缓存对象的表示。 用户将从缓存中检索数据。
我应该如何使用Spring实现这一点? 我应该使用什么数据结构? 我应该用什么的线程和缓存对象? 我应该使用这个WeakHashMap中?
注:我们的应用程序不支持注释驱动的MVC。
春3.X版本中引入抽象的高速缓存。 您可以官方Spring文档中阅读它(该网站已关闭今天因某种原因:)),或在这个职位的例子。
http://java.dzone.com/articles/spring-cache-abstraction-0
有了这种抽象,所有你需要做的,以使高速缓存是一些注释添加到您的服务,如
要添加值到缓存
@Cacheable("customers")
public Customer findCustomer(long customerId) {...}
要删除值缓存
@CacheEvict(value="customer", allEntries = true)
public void removeAllCustomers(long customerId) {...}
并启用缓存spring配置。 春天魔法AOP负责剩下的照顾。 而作为一切使用Spring,你可以使用任何你想要的执行,并执行许多支持开箱即用。 而你并不需要改变的代码配发对于这一点,只需添加注释,根据需要:)
除了春原生支持,有番石榴缓存
https://code.google.com/p/guava-libraries/wiki/CachesExplained
你可以选择你想要什么,例如通过指定缓存按键寿命超时实现您的要求,所以它会从缓存中后特定的时间被删除,并重新计算下一个电话。