安装Infinispan的先决条件只有一个就是Java虚拟机,Java 1.6或以后版本的Java需要安装在您的操作系统上。一个Java虚拟机(JVM)能够创建一个Java二进制码可以运行的虚拟环境,JVM创建这个标准的虚拟环境对底层的硬件和操作系统等是不考虑的,它运行程序员只编写Java代码一次而可以运行于其他任何操作系统。详细关于安装Java步骤参照系列一:软件安装和资料下载
访问Infinispan网站http://infinispan.org/,点击下载Downloads,选择相关版本,比如Infinispan 6.0,下载二进制和示例,AS 7.x 模块,Infinispan服务器。下载完成解压zip包即完成安装。
下载二进制包和示例完成后会有infinispan-6.0.0.Final-all.zip生成,解压此zip文件产生infinispan-6.0.0.Final-all目录,该目录下包括Infinispan二进制文件infinispan-core.jar,lib目录中有所有用到的二进制包,etc目录中包含相关配置文件,bin目录中包括所有示例的启动脚本。
下载AS7.x 模块完成后会有infinispan-as-modules-6.0.0.Final.zip生成,解压此zip文件产生Infinispan模块,如果需要将infinispan与JBossAS 7整合,我们需要将解压产生的模块拷贝到JBOSS_HOME/modules中。
下载Infinispan服务器完成后会有infinispan-server-6.0.0.Final-bin.zip生成,解压此zip文件产生infinispan-server-6.0.0.Final目录,Infinispan服务器基于第三代JBoss内核MSC(模块化服务容器),infinispan-server-6.0.0.Final目录类是JBoss AS 7目录结构,modules中包含所有模块,bin中包括所以启动脚本,standalone中包括启动的实例。
以远程客户端-服务器模式运行Infinispan我们只需要运行Infinispan服务器目录中bin下面的启动脚本即可。为了方便描述,我们将Infinispan服务器目录称为JDG_HOME。我们可以独立的运行Infinispan,也可以以集群的形式运行Infinispan,运行启动脚本时我们也可以添加相关参数,来完成自定义运行Infinispan。
$JDG_HOME/bin/standalone.sh
集群模式涉及到多个Infinispan实例,这就是我们说的数据网格模式,该模式下各个实例可以看作数据网格中的一个节点,各个实例之间数据透明,我们可以动态扩展网格而不影响网格中数据,我们随后章节会详细介绍这些。运行如下启动脚本我们可以集群的模式运行Infinispan:
$JDG_HOME/bin/clustered.sh
在$JDG_HOME/standalone/configuration目录下面有许多自定义的配置文件,比如standalone-hotrod-multiple.xml,clustered-topology.xml等,我们也可以编辑自己定义自己的配置文件。使用如下命令以独立的模式运行Infinispan指定自定义的配置文件:
$JDG_HOME/bin/standalone.sh -c ${FILENAME}
$JDG_HOME/bin/clustered.sh -c ${FILENAME}
注意,-c不能够指定绝对路径,所以-c指定的自定义配置文件必须存在于$JDG_HOME/standalone/configuration目录下面。如果不使用-c参数则默认的配置文件被使用。
如果启动Infinispan不绑定IP地址,127.0.0.1/localhost为默认的IP,但在生产环境中运行Infinispan必须绑定一个IP地址,我们使用-b参数来为Infinispan指定一个IP,具体独立模式下使用如下命令绑定IP:
$JDG_HOME/bin/standalone.sh -b ${IP_ADDRESS}
$JDG_HOME/bin/clustered.sh -b ${IP_ADDRESS}
我们推荐使用Maven创建Infinispan工程,关于Maven安装配置请参照本书第二章。另外我们需要将Infinispan依赖包添加到pom.xml,具体如下面所示:
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-core</artifactId> <version>${infinispan.version}</version> </dependency> <dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-client-hotrod</artifactId> <version>${infinispan.version}</version> </dependency>
注意,infinispan.version作为变量定义在pom.xml的properties属性中,您可选择相应版本,我们这里选择6.0.0.Final。如果不使用Maven创建Infinispan工程,除了添加infinispan-core.jar外,相关依赖包(infinispan-6.0.0.Final-all/lib)也需要添加。
使用DefaultCacheManager创建默认缓存:
cache = new DefaultCacheManager().getCache();
cache.put("key", "value");
assertEquals(1, cache.size()); assertTrue(cache.containsKey("key"));
Object v = cache.remove("key");
assertEquals("value", v); assertTrue(cache.isEmpty());
cache.putIfAbsent("key", "newValue"); assertTrue(cache.get("key").equals("newValue"));
cache.put("key", "value", 5, TimeUnit.SECONDS);
assertTrue(cache.containsKey("key"));
Thread.sleep(10000); assertFalse(cache.containsKey("key"));
创建使用远程缓存首先要确保Infinispan远程服务器运行,如下运行$JDG_HOME/bin下启动脚本启动Infinispan服务器:
./standalone.sh
Configuration configuration = new ConfigurationBuilder().addServers("127.0.0.1:11222").build(); RemoteCacheManager manager = new RemoteCacheManager(configuration); cache = manager.getCache();
cache.put("key", "value"); assertEquals(1, cache.size()); assertTrue(cache.containsKey("key")); cache.remove("key"); assertTrue(cache.isEmpty()); cache.putIfAbsent("key", "newValue"); assertTrue(cache.get("key").equals("newValue")); cache.put("key", "value", 5, TimeUnit.SECONDS); assertTrue(cache.containsKey("key")); Thread.sleep(10000); assertFalse(cache.containsKey("key"));
实际应用中我们需要使用命名的缓存,比如在JBoss集群中,保存Web会话需要使用命名的缓存,这样当需要更新Web会话时,我们可以通过缓存名来获取缓存,然后进行相应的更新。Infinispan中命名的缓存可以不需要申明在配置文件中,如果配置文件中没有配置命名的缓存我们可以等效的使用API接口进行申明,如下代码段所示:
EmbeddedCacheManager manager = new DefaultCacheManager(); manager.defineConfiguration("custom-cache", new ConfigurationBuilder() .eviction().strategy(EvictionStrategy.LIRS).maxEntries(10) .build()); cache = manager.getCache("custom-cache");
通常我们更喜欢将命名的缓存配置在配置文件中,如下面XML配置:
<?xml version="1.0" encoding="UTF-8"?> <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:6.0 http://www.infinispan.org/schemas/infinispan-config-6.0.xsd" xmlns="urn:infinispan:config:6.0"> <namedCache name="custom-cache"> <eviction strategy="LIRS" maxEntries="10" /> </namedCache> </infinispan>
cache = new DefaultCacheManager("namedCache.xml").getCache("custom-cache");
注意上面通过XML定义命名缓存和使用API申明命名缓存是等效的。