(1)初始化代码
//使用配置文件 example-default.xml 初始化Ignite
Ignite ignite=Ignition.start("example-default.xml") ;
//或者不使用配置文件
Ignite ignite=Ignition.start();
//是否设置为客户端模式
Ignition.setClientMode(true);
初始化有两种方式 1 使用配置文件 2 不使用配置文件如上
(2) Ignite Xml配置文件
127.0.0.1:47500..47509
缓存有三种方式 Local, Backup, partition
(1) 创建缓存代码
CacheConfiguration cfg = new CacheConfiguration(); //定义一个缓存配置
cfg.setName("TestCache"); //必须设置名字
cfg.setCacheMode(CacheMode.PARTITIONED);//存储方式 PARTITIONED适合分布式存储
cfg.setIndexedTypes(Integer.class, TestClass.class); //必须设置索引类否则只能以key-value方式查询
IgniteCache Cache = ignite.getOrCreateCache(cfg);//根据配置创建缓存
//可以给缓存的数据设置一个过期时间
Cache=cache.withExpiryPolicy(new CreateExpiryPolicy(new Duration(TimeUnit.Hours,24)))
Person类
public class Person implements Serializable {
/** Person ID (indexed). */
@QuerySqlField(index = true)
private long id;
/** Organization ID (indexed). 对此字段添加索引*/
@QuerySqlField(index = true)
private long orgId;
/** First name (not-indexed). 不索引*/
@QuerySqlField
private String firstName;
/** Last name (not indexed). */
@QuerySqlField
private String lastName;
/** Resume text (create LUCENE-based TEXT index for this field). */
@QueryTextField
private String resume;
/** Salary (indexed). */
@QuerySqlField(index = true)
private double salary;
}
Person类的 @QuerySqlField属性是必须的 推荐所有的字段至少设置这个属性 这样可以使用sql的方式进行查询否则没有设置此属性的列将不能进行查询
Person是一个自定义类,定义缓存时建议使用上面的代码方式首先创建一个 CacheConfiguration 配置类,配置相关的属性后 ,例如上面再使用它的配置方式配置了缓存的名字、存储模式、缓存的索引类,其中
cfg.setIndexedTypes(Integer.class, TestClass.class); 设置索引类这一配置是必须的 ,主要原因如下:
(重要) 通过创建类的形式进行缓存的存储,例如上面的例子就是(实际使用过程中大多数会使用这种形式),如果在查询过程 中想以表的形式查询(ignite提供了多种Sql的查询方式),那么必须使用这一句说明索引类。否则就只能以Key-value的方式读取对应Key的数据,而不能使用其他的类似sql过滤的方式查找数据
(重要)存入缓存的类例如上面的Person类 如果想使用sql语句中条件过滤的方式查询数据,请将类的字段加上如上的注解
@QuerySqlField(index = true) 会给此字段添加单独的索引 @QuerySqlField 此字段允许条件查询
(重要) 如果希望以sql的语句查询Person类 请不要再Person类中定义Map之类的复杂数据结构,否则将造成不能使用sql进行查询
//同步存储
Cache.put(1, new Person(1,2)); //使用类的形式存储缓存数据
Cache.put(2, new Person(2,3));
//异步存储
Cache.putAsync(1, new Person(1,2)); //使用类的形式存储缓存数据
Cache.putAsync(2, new Person(2,3));
(1)以Key-Value的方式进行读取
Student hello = Cache.get(1);
直接使用get函数读取参数为key
(2)使用SqlQuery读取(推荐使用此方式进行数据的查询)
SqlQuery ss1=new SqlQuery(Student.class,"classId>0 and classId=1");
List> slist =stuCache.query(ss1).getAll();
SqlQuery 类的第二个参数 是sql组合的形式例如在例子中使用and进行了组合查询
(3)使用SqlFieldsQuery进行数据查询
SqlFieldsQuery query = new SqlFieldsQuery(
"select stu.classId,stu.name from Student as stu ");
List> result= stuCache.query(query).getAll();
此种方式支持完整的sql语句,例如上面的表明是Student和存储的类名是一致的,也可以使用cache.Student来进行限定,此种方式还支持多个表关联查询
例如 SqlFieldsQuery query = new SqlFieldsQuery(
"select stu.classId,stu.name from Student as stu,cache2.School where stu.classid=cache2.School.classid ");
(重要)此种方式注意中文乱码,在测试过程中发现中文出现乱码,使用多种编码 格式没有解决此问题
(4)使用java的SQI进行查询
此种方式与标准的数据库查询是一样的简单易用,前提是按照开始创建数据库的方式成功创建了表
try
{
Class.forName("org.apache.ignite.IgniteJdbcThinDriver");
} catch (ClassNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
// Open JDBC connection
Connection conn=null;;
try {
conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// Get data
if(conn==null)
return;
try (Statement stmt = conn.createStatement()) {
try (ResultSet rs =
stmt.executeQuery("SELECT p.name, c.name " +
" FROM Person p, City c " +
" WHERE p.city_id = c.id")) {
while (rs.next())
System.out.println(rs.getString(1) + ", " + rs.getString(2));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
此软件对ignite的支持不太完美,但可以查看成功建了那些表
注意建立了缓存并不代表可以以表的形式访问了,需使用本文提到的方式建立缓存才能以表的形式访问
(1)打开工具后输入open连接ignite ,随后根据出现的提示输入配置文件编号就可以
(2)输入cache可以查看当前建立的缓存
(3) 使用cache的其他命令可以详细查看cache中的每一条数据