使用缓存
来源:jhipster |
时间:2018-11-08
|
|

使用缓存

缓存可以在JHipster中的两个级别使用:

  • 使用Spring Cache抽象,这是生成应用程序时的一个特定问题,并使用Spring Boot @EnableCaching注释。这需要根据您的特定业务需求进行调整,并且工作在比Hibernate二级缓存更高的级别。

  • 作为Hibernate二级缓存,缓存解决方案可以为您的应用程序带来巨大的性能提升,这就是人们通常使用JHipster所做的事情。请注意,此选项仅适用于SQL数据库,如果您已选择使用Spring Cache。

Spring Cache和Hibernate二级缓存将使用相同的缓存解决方案,但不能在同一级别工作:我们不建议将两者同时用于相同的对象,因为这会使缓存失效问题更加复杂。相反,我们建议您使用:

  • 用于更高级别或聚合对象的Spring Cache,就像您通常使用DTO一样

  • Hibernate二级缓存用于实体映射到数据库,以减少SQL请求的数量

JHipster支持4种缓存实现:Ehcache,Hazelcast,Infinispan和Memcached。它们都在下面详述。

常见配置

缓存在CacheConfiguration中配置,也可以使用JHipster 常用应用程序属性进行调整

使用Ehcache缓存

Ehcache是JHipster中带有monoliths的默认缓存。Ehcache易于设置和配置,启动速度非常快,因此它是“普通”单块的完美解决方案。

使用JHipster,Ehcache无法作为分布式缓存工作,因为它没有允许以编程方式添加新节点的API

Ehcache在CacheConfigurationSpring配置bean中配置,它在JHipster 常用应用程序属性中定义了2个属性(time-to-live-secondsmax-entries可以在应用程序的特定Spring配置bean中添加更多属性ApplicationProperties

默认情况下,time-to-live-seconds默认值为3600秒(1小时)dev,处于prod模式和模式,模式max-entries下默认值为100个条目,dev模式下默认值为1,000个条目prod

应根据您的特定业务需求调整这些值,JHipster监视屏幕可帮助您更好地了解应用程序中的缓存使用情况。另请参阅Ehcache文档以微调这些值。

使用Hazelcast进行缓存

Hazelcast可以作为本地缓存(如Ehcache),但也可以作为分布式缓存。结果是:

  • 它是微服务的默认选项,因为我们希望微服务可以扩展

  • 它是网关的默认选项,因为我们希望它们可以扩展,并且Hazelcast用于分发网关速率限制信息

  • 当在整体中使用时,Hazelcast需要具有JHipster Registry选项才能扩展

对于扩展应用程序,Hazelcast将使用配置的服务发现来查找新节点,并水平扩展。使用微服务和网关,这将适用于JHipster注册表和Consul,对于monoliths,这只适用于JHipster Registry。

添加新节点时,它会将自身注册到服务发现(例如,它将在JHipster注册表中可用),并查找相同类型的其他节点。如果它找到一个或多个相同类型的节点,它将使用它们创建一个集群缓存:您应该在每个节点的日志中看到一条消息,如下例所示:

[172.18.0.10]:5701 [dev] [3.7]
Members [4] {
Member [172.18.0.10]:5701 - 3cbddfcd-0229-4cd5-be55-4611927a9071 this
Member [172.18.0.5]:5701 - 204d457d-f6fe-43f2-8e8d-497e96b3f08e
Member [172.18.0.14]:5701 - 7804d535-86fb-46be-b2a5-d7801dc6a4df
Member [172.18.0.11]:5701 - 6114ae28-56cd-4840-a575-4d73a6003744
}

为了更好地与Hazelcast合作,JHipster包括对Hazelcast管理中心的支持:

  • 请注意,您只能免费监控2个节点,因为这是一个专有产品。但这已足以测试您的应用程序。

  • 它是使用JHipster 常用应用程序属性jhipster.cache.hazelcast.management-center在您的application-dev.ymlapplication-prod.yml文件中使用密钥配置的请注意,默认情况下禁用它。

  • JHipster生成Docker Compose配置,以便轻松运行Hazelcast管理中心。请阅读我们的Docker Compose文档,并使用运行应用程序docker-compose -f src/main/docker/hazelcast-management-center.yml up -d

用Infinispan缓存

Infinispan是一种高性能的缓存解决方案,可以作为内存本地缓存和群集缓存。它支持多种缓存模式,

使用JHipster,可以使用Infinispan:

  • 作为Spring Cache抽象的实现

  • 作为Hibernate二级缓存

以下是预先配置的默认配置:

  • 实体以无效高速缓存模式运行

  • 对于特定于应用程序的缓存,预定义了三种缓存配置

    • 用于缓存节点本地数据的local-app-data

    • dist-app-data用于跨节点分布式缓存数据(由分布式副本计数确定的副本数)

    • repl-app-data用于跨节点复制数据

可以使用JHipster 常用应用程序属性来微调高速缓存中的每个单独操作模式的驱逐,生存时间和最大条目以及分布式模式的副本计数微调jhipster.cache.infinispan特定于应用程序的缓存和spring.jpa.propertiesHibernate的二级缓存的属性

如果启用了JHipster Registry,则将从注册表中填充主机列表。如果未启用JHipster Registry,则主机发现将基于config-fileInfinispan Jar中打包的默认传输设置Infinispan支持大多数平台本地发现,如Kubernets / OpenShift,AWS,Azure和Google。

虽然Infinispan 9.0.0.Final GA及更高版本增加了对通过使用本机KUBE_PING发现在Kubernetes和OpenShift上运行Infinispan嵌入式缓存应用程序的支持,但Hibernate依赖性尚未更新到9.x版本,因此不支持本机发现Kubernetes和OpenShift。但是,您可以通过使用JHipster Registry进行实例发现来运行应用程序。

使用Memcached进行缓存

Memcached是一个开源分布式缓存。它与JHipster支持的其他缓存实现完全不同:

  • Memcached无法作为Hibernate二级缓存工作,它只支持Spring Cache抽象。

  • Memcached仅适用于远程服务器,没有本地缓存。因此,您的对象总是被序列化/反序列化并通过网络,这意味着如果您有一小组可以轻松放入内存的对象,它可能效率较低。

  • 它很容易扩展,并且很便宜。大多数大型云提供商(如Heroku,GCP或AWS)都支持Memcached。因此,与其他缓存实现相比,拥有分布式(且便宜)Memcached群集要容易得多。

JHipster采用了时下流行Xmemcached memcached的Java客户端,并配置其使用常用JHipster最重要的属性常见的应用性能

请注意,每个缓存必须配置为CacheConfiguration配置bean中的特定Spring bean。

由于Memcached需要在其类加载器中序列化/反序列化对象,因此在使用Spring Boot devtools(使用特定的类加载器对应用程序类进行热重载)时不起作用。这就是默认情况下在开发模式下禁用Memcached的原因。

与JHipster一样,提供了Docker Compose配置,因此您可以轻松地在计算机上启动Memcached服务器。为了使用它,请运行docker-compose -f src/main/docker/memcached.yml up -d


提交
查看更多评论
没有更多评论