我应该如何实现在Spring缓存对象/系统?(How should I implement a ca

2019-10-21 05:38发布

我的工作有数百个用户,但有100-1万条数据正在发送为每个用户的响应的Spring应用程序。 因此,表现对我们来说是一个大问题。 我们采用Java,JSP,jQuery的,HTML和CSS。 对于位我的工作,我建立一个通知系统。 例如,如果用户有有过了保质期的项目,然后我们发送通知给用户。 然而,问题是:

  • 我使用jQuery / AJAX轮询服务器每分钟
  • 每个查询是非常昂贵的,因为我们对成千上万的数据,每分钟为每个用户100S搜索数据库。 此外,还有数百个用户。
  • 我们不检查最后修改时间,我们正在检查这个截止日期字段是否是当前时间之前。

这个想法我现在所拥有的是使用一个线程,该线程将不断检查数据库的最近更新的项目,如果有新的项目,我们更新缓存对象的表示。 用户将从缓存中检索数据。

我应该如何使用Spring实现这一点? 我应该使用什么数据结构? 我应该用什么的线程和缓存对象? 我应该使用这个WeakHashMap中?

注:我们的应用程序不支持注释驱动的MVC。

Answer 1:

春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

你可以选择你想要什么,例如通过指定缓存按键寿命超时实现您的要求,所以它会从缓存中后特定的时间被删除,并重新计算下一个电话。



文章来源: How should I implement a cache object/system in Spring?