gpt4 book ai didi

spring - 缓存最佳实践 java

转载 作者:行者123 更新时间:2023-12-01 23:59:30 25 4
gpt4 key购买 nike

我有一个基于 Struts 的 B2B 应用程序。一个页面中可以有 20-25 个列表框,列表框中的数据可能因客户而异。例如,列表框将是合格国家列表、产品品牌列表等。一个客户下会有多个用户。在当前的解决方案中,当客户下的第一个用户登录时,客户对象被设置在应用程序范围(ServletContext)中。这种方法是为了避免在页面加载时调用数据库。

我们正在寻求重新构建解决方案,预计客户群将增长 50%。
新应用程序将在带有 Hibernate-JPA 的 Spring 框架上,最后应用程序将部署在 JBoss 集群上。
为处理列表框数据的最佳缓存方法寻找专家意见。

谢谢你。

最佳答案

如果您的应用程序使用 Spring,一个好的开始是 Caching abstraction , 另见 this blog post for a good introduction

设计你的模型

您需要为这些列表的内容设计一个模型,您可能可以直接在您的 struts 应用程序中重用这些内容。您可能不想缓存 Country本身,但更多的是过滤列表,因为这可能是您获得最佳 yield 的地方。由于您的应用程序正在使用 Hibernate,您可以轻松地 enable the 2nd level cache in Hibernate无论如何,对于实体。

设计好之后,您需要找到一种方法来生成足以识别应用程序用户的 key 。客户的 id 可能是一个很好的候选者。

创建您的存储库

然后,您可以创建一个存储库,根据一些参数提供这些列表的内容。理想情况下,唯一的论点是识别客户的关键,但您可以根据需要对其进行调整。例如:

public class YourRepositoryImpl implements YourRepository {

@Cacheable("modelCache")
public YourModel get(String customerId) {
// compute the list for that customer.
// Only called if not in the cache
}

...
}

这基本上指示 Spring 更新 modelCache缓存 get 的结果方法。在这种特殊情况下, customerId是用于将值存储在缓存中的键。通常,如果您再次调用此方法,您的代码甚至不会被调用,因为 Spring 会在缓存中为该键找到一个条目并直接返回该值。

如果无法轻松创建 key 或需要更多上下文,则可以定义自定义 KeyGenerator或指定要使用的模式 as a SPeL expression in the annotation directly .

启用缓存支持

您可以通过 @EnableCaching 的 XML 命名空间轻松打开缓存支持。 java configuration .实际的缓存被委托(delegate)给一个缓存实现,它支持 ehcache、guava、并发哈希映射和 JSR-107 兼容的开箱即用缓存。您可以在此阶段配置所需的所有缓存提供程序特定设置:它不会影响您的代码,您甚至可以在不更改代码的情况下从一个提供程序更改为另一个提供程序

更新缓存

如果数据是只读的,仅此而已。如果这些列表的内容发生变化,您需要处理驱逐,以便您的 get再次调用方法来重新计算/刷新列表(参见 @CacheEvict),或者您可以自己更新缓存的内容(参见 CachePut)。您还需要配置后端缓存,以便缓存的内容在集群的所有节点上保持一致。

要求更改特定列表的逻辑可能难以实现,因此您可能应该在设计模型时尽早关注该部分。

关于spring - 缓存最佳实践 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22196230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com