我们有一个基于 java 的产品,它将 Calculation 对象作为 blob 保存在数据库中。在运行时,我们将其保存在内存中以获得快速性能。现在有另一个进程定期更新数据库中的这个计算对象。现在,最好的实现策略是什么,以便当这个对象在数据库中更新时,缓存会删除存储的对象并再次从数据库中获取它。
在必须使用之前,我不会喜欢任何缓存框架。
我很欣赏对此的回应。
我们有一个基于 java 的产品,它将 Calculation 对象作为 blob 保存在数据库中。在运行时,我们将其保存在内存中以获得快速性能。现在有另一个进程定期更新数据库中的这个计算对象。现在,最好的实现策略是什么,以便当这个对象在数据库中更新时,缓存会删除存储的对象并再次从数据库中获取它。
在必须使用之前,我不会喜欢任何缓存框架。
我很欣赏对此的回应。
如果不了解您的系统架构、设计约束、IT 策略等,很难为您的问题提供好的答案。
我个人会使用消息传递模式来解决这个问题。该模式的一些优点如下:
然而,实现消息模式可能是一项非常具有挑战性的任务,我建议采用现有的框架或产品之一。
我希望这至少会有所帮助。
我之前做过一些类似于你的场景的工作,一般有两种方法。一,缓存持有者定期轮询数据库,获取它需要的数据并将其保存在内存中。数据可以存储在 HashMap 或其他一些集合中。这种方法简单易实现,不需要额外的框架或库。但是用户将不得不时不时地忍受脏数据。此外,如果轮询器数量巨大或查询速度不够快,轮询会对 DB 造成很大压力。但是,如果您对实时性的要求不是很高,并且您的系统规模相对较小,这通常是一个不错的选择。
另一种方式是缓存持有者订阅数据更新者的通知,并在收到通知后更新其数据。它提供了更好的用户体验,但这会给您的系统带来更多的复杂性,因为您必须涉及一些 MS 基础架构,例如 JMS。开发和调优更耗时。
我知道我很晚才回应这个问题,但它可能会帮助寻找同样问题的人。这是我的问题,我将 requestPerMinute 信息存储在 Java 过滤器中的 Hashmap 中,该过滤器在应用程序启动期间被加载。如果有人用新信息更新数据库,地图不知道这一点。解决方案:我在我的 Java 过滤器中使用了一个变量 updateTime ,它只存储了我的哈希图上次更新的时间,并且每次请求它都会检查当前时间是否超过 24 小时,如果是,那么它会从数据库中更新哈希图。所以每 24 小时它只是刷新整个哈希图。虽然我的用例不是实时更新,所以它适合用例。