Infinispan缓存拓扑模式详解
立即解锁
发布时间: 2025-08-18 01:39:08 阅读量: 1 订阅数: 3 

### Infinispan缓存拓扑模式详解
#### 1. 概述
在使用缓存时,不同的应用场景对缓存的要求各不相同。有的应用可能只需要基本的缓存功能,有的则需要事务支持,还有的需要分布式二级缓存。为了满足这些不同的需求,Infinispan提供了丰富的配置选项,支持多种缓存拓扑模式。下面将详细介绍几种常见的缓存模式。
#### 2. 集群模式基础
Infinispan使用JGroups库来提供网络通信功能。JGroups是一个用于可靠组通信的工具包,它能实现集群节点发现、点对点和点对多点通信、故障检测以及集群节点间的数据传输。
Infinispan可以配置为仅在本地JVM中运行,也可以配置为集群模式。集群模式下,所有节点作为一个单一的缓存,提供大量的内存堆。在集群中,缓存可以配置为全复制模式、失效模式或分布式模式。
#### 3. 本地模式
本地模式是使用Infinispan最简单的方式,它只考虑本地JVM来缓存对象,不能将数据复制或分发到其他节点,因此不是真正的数据网格。本地缓存不会与集群中的其他实例进行通信或加入集群,在这种模式下,Infinispan不需要JGroups通道,但仍然依赖该库。
在本地模式下,应用程序会受到JVM堆最大大小的限制。以下是配置为本地模式的代码示例:
```java
public EmbeddedCacheManager getCacheManager(){
GlobalConfiguration glob = new GlobalConfigurationBuilder()
.nonClusteredDefault()
.build(); // Builds the GlobalConfiguration object
Configuration loc = new ConfigurationBuilder()
.clustering().cacheMode(CacheMode.LOCAL)
.eviction().maxEntries(400).strategy(EvictionStrategy.LIRS)
.build();
return new DefaultCacheManager(glob, loc, true);
}
```
也可以通过默认方式创建本地缓存:
```java
return new DefaultCacheManager();
```
Infinispan 6和7的本地缓存配置示例如下:
- Infinispan 6:
```xml
<clustering mode="local" />
```
- Infinispan 7:
```xml
<local-cache name="DefaultLocalCache" />
```
#### 4. 失效模式
失效模式意味着不复制或分发缓存数据,而是在特定对象或数据过时后,通知网格中的其他节点将其从缓存中逐出。每次缓存中的对象发生更改时,Infinispan会向集群广播消息,表明该对象在其他实例中已过时,应从缓存内存中移除。
这种模式的好处是减少了网络流量,因为失效消息比实际复制更新的数据要小得多。此外,参与网格的其他缓存只有在需要时才会惰性地查找修改后的数据。然而,如果缓存中的对象频繁更改,失效模式就不太合适,因为网络上缓存失效消息的开销可能会超过这种缓存模式的好处。
以下是Infinispan 6和7的失效模式配置示例:
- Infinispan 6:
```xml
<namedCache name="invalidatedWithClusterCacheLoaderCache">
<clustering mode="invalidation">
<sync replTimeout="20000" />
</clustering>
<persistence>
<store class="ClusterLoader" preload="false">
<properties>
<property name="remoteCallTimeout" value="20000" />
</properties>
</store>
</persistence>
</namedCache>
```
- Infinispan 7:
```xml
<invalidation-cache name="invalidatedWithClusterCacheLoaderCache"
mode="SYNC" remote-timeout="20000">
<persistence>
<cluster-loader remote-timeout="20000" preload="false" />
</persistence>
</invalidation-cache>
```
#### 5. 复制模式
复制模式是最简单的集群模式,由一个或多个缓存实例将其数据复制到所有集群节点,最终所有集群节点将拥有相同的数据。
在TCP中,连接是点对点的,随着集群规模的增加,应用程序性能可能会受到严重影响。为了缓解这个问题,可以配置Infinispan使用UDP多播进行对等发现和传输,这在一定程度上提高了大型集群的性能。
复制模式虽然提供了一种简单快速的方式在网格中共享对象状态,但由于需要在服务器之间发送大量的复制消息,这种策略只在小型集群中具有良好的性能。此外,网格中对象的每次更改都需要将对象的新版本推送到网格内的所有其他Infinispan实例,这会增加
0
0
复制全文
相关推荐










