我应该如何在Spring中实现一个缓存对象/系统?

欧锦华

我正在开发一个Spring应用程序,该应用程序具有数百个用户,但是有100-1百万条数据作为响应发送给每个用户。因此,性能对我们来说是一个大问题。我们利用Java,JSP,jQuery,HTML和CSS。对于我正在做的工作,我正在构建一个通知系统。例如,如果用户的商品过期了,那么我们会向该用户发送通知。但是,问题是:

  • 我正在使用jQuery / AJAX每分钟轮询一次服务器
  • 每个查询非常昂贵,因为我们正在数据库中搜索每个用户每一分钟的数十万个数据。而且,有数百个用户。
  • 我们不在检查上次修改时间,而是在检查此到期日期字段是否在当前时间之前。

我现在的想法是使用一个线程,该线程将连续检查数据库中是否有新更新的项目,如果有新项目,我们将更新缓存对象的表示形式。用户将从缓存中检索数据。

我应该如何用Spring来实现呢?我应该使用什么数据结构?我应该为线程和缓存对象使用什么?我应该为此使用WeakHashMap吗?

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

马瓦拉齐

Spring在3.x RELEASE中引入了Cache的抽象。您可以在Spring官方文档(由于某种原因该站点今天已关闭:)中,或在此文章中阅读有关此内容的信息。

http://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的所有组件,您可以使用所需的任何实现,并且开箱即用地支持许多实现。而且您不需要为此更改代码分配,只需根据需要添加注释:)

除了Spring本机支持外,还有Guava Cache

https://code.google.com/p/guava-libraries/wiki/CachesExplained

您可以选择所需的内容,并通过例如指定高速缓存密钥生存期来实现您的要求,因此它将在特定时间后从高速缓存中删除,并在下一次调用时重新计算。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我应该如何在Spring中实现一个缓存对象/系统?

来自分类Dev

一个人应该如何在泛型中实现空对象模式?

来自分类Dev

我们如何创建一个我们应该实现的对象的“骨架类型”?

来自分类Dev

我如何在jQuery中创建一个对象

来自分类Dev

如何在 Rails 中实现一个简单的通知系统?

来自分类Dev

我应该如何在Typescript中定义一个Promise回调的类型?

来自分类Dev

我应该如何在Go中定义一个空切片?

来自分类Dev

我应该如何在Python中包装一个交互式子进程(例如shell)

来自分类Dev

delphi COM类型库中定义的方法应该如何实现,才能返回另一个COM对象?

来自分类Dev

我如何在一个类中实现asyncio websockets?

来自分类Dev

我如何在Lisp中创建一个函数来实现从右到左的lambda

来自分类Dev

如何在php中创建一个插件系统?

来自分类Dev

流星:我应该如何更新用户集合以在对象/字典中包括一个新属性?

来自分类Dev

如何实现一个空对象?

来自分类Dev

我应该如何创建一个 Dockerfile 以在一个实例中运行多个服务?

来自分类Dev

我应该如何在Django视图中创建一个可迭代的对象,该对象将允许我通过模板中的外键(或缺少外键)对项目进行分组?

来自分类Dev

我应该如何从一个Controller Action返回两个对象列表?

来自分类Dev

如何在我的Flask API中返回一个通用的JSON对象?

来自分类Dev

如何在我的json数据中包含一个主要对象

来自分类Dev

如何在flink中实现一个触发器,该缓冲区一直缓存到超时,并在超时后触发?

来自分类Dev

我应该如何在__init__中定义一个依赖于协程的变量?

来自分类Dev

我应该如何在Rails中实现我的Ruby代码?

来自分类Dev

我在 C 中实现了一个 Map 对象,但使用它会给我一个分段错误

来自分类Dev

Scala:我如何在整个repl中安装一个软件包系统以供使用?

来自分类Dev

我们如何在Java中实现方法缓存

来自分类Dev

我应该如何完全删除一个对象?(C#,Objective-C,Java)

来自分类Dev

如何使我当前的文件系统成为 BTRFS 中的第一个根文件系统

来自分类Dev

我如何在一个请求中创建子对象和父对象Django rest框架

来自分类Dev

如何在powershell中返回一个对象

Related 相关文章

  1. 1

    我应该如何在Spring中实现一个缓存对象/系统?

  2. 2

    一个人应该如何在泛型中实现空对象模式?

  3. 3

    我们如何创建一个我们应该实现的对象的“骨架类型”?

  4. 4

    我如何在jQuery中创建一个对象

  5. 5

    如何在 Rails 中实现一个简单的通知系统?

  6. 6

    我应该如何在Typescript中定义一个Promise回调的类型?

  7. 7

    我应该如何在Go中定义一个空切片?

  8. 8

    我应该如何在Python中包装一个交互式子进程(例如shell)

  9. 9

    delphi COM类型库中定义的方法应该如何实现,才能返回另一个COM对象?

  10. 10

    我如何在一个类中实现asyncio websockets?

  11. 11

    我如何在Lisp中创建一个函数来实现从右到左的lambda

  12. 12

    如何在php中创建一个插件系统?

  13. 13

    流星:我应该如何更新用户集合以在对象/字典中包括一个新属性?

  14. 14

    如何实现一个空对象?

  15. 15

    我应该如何创建一个 Dockerfile 以在一个实例中运行多个服务?

  16. 16

    我应该如何在Django视图中创建一个可迭代的对象,该对象将允许我通过模板中的外键(或缺少外键)对项目进行分组?

  17. 17

    我应该如何从一个Controller Action返回两个对象列表?

  18. 18

    如何在我的Flask API中返回一个通用的JSON对象?

  19. 19

    如何在我的json数据中包含一个主要对象

  20. 20

    如何在flink中实现一个触发器,该缓冲区一直缓存到超时,并在超时后触发?

  21. 21

    我应该如何在__init__中定义一个依赖于协程的变量?

  22. 22

    我应该如何在Rails中实现我的Ruby代码?

  23. 23

    我在 C 中实现了一个 Map 对象,但使用它会给我一个分段错误

  24. 24

    Scala:我如何在整个repl中安装一个软件包系统以供使用?

  25. 25

    我们如何在Java中实现方法缓存

  26. 26

    我应该如何完全删除一个对象?(C#,Objective-C,Java)

  27. 27

    如何使我当前的文件系统成为 BTRFS 中的第一个根文件系统

  28. 28

    我如何在一个请求中创建子对象和父对象Django rest框架

  29. 29

    如何在powershell中返回一个对象

热门标签

归档