工程采用 maven,引入依赖:
代码放在github上面了:
https://github.com/freewebsys/riak_demo
<dependencies> <dependency> <groupId>com.basho.riak</groupId> <artifactId>riak-client</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>com.basho.riak.protobuf</groupId> <artifactId>riak-pb</artifactId> <version>1.4.0</version> </dependency> </dependencies>
创建一个UserInfo类:
/** * 用户信息. */ public class UserInfo { private String uid; private String name; private String city; private String nickName; ...get set 方法忽略
使用Riak进行CRUD:只是简单的将uid作为key存储,没有创建索引。
package com.demo; import java.io.IOException; import com.basho.riak.client.IRiakClient; import com.basho.riak.client.RiakException; import com.basho.riak.client.RiakFactory; import com.basho.riak.client.RiakRetryFailedException; import com.basho.riak.client.bucket.Bucket; public class ClientTest { public static void main(String[] args) throws IOException { IRiakClient client = null; try {// 使用pbc方式连接,而不是http,在/etc/riak/app.config client = RiakFactory.pbcClient("127.0.0.1", 8087); } catch (RiakException e) { e.printStackTrace(); } // 显示. System.out.println(client); Bucket myBucket = null; String bucketName = "userInfo"; try { myBucket = client.fetchBucket(bucketName).execute(); if (myBucket == null) { myBucket = client.createBucket(bucketName).execute(); } } catch (RiakRetryFailedException e) { e.printStackTrace(); } // ################保存数据 . UserInfo info = new UserInfo(); info.setUid("001"); info.setName("张三"); info.setCity("北京"); try { myBucket.store(info.getUid(), info).execute(); } catch (Exception e) { e.printStackTrace(); } // ################查询数据. UserInfo fetchedUserInfo = null; try { fetchedUserInfo = myBucket.fetch("001", UserInfo.class).execute(); System.out.println(fetchedUserInfo); } catch (Exception e) { e.printStackTrace(); } // ################修改数据. try { fetchedUserInfo = myBucket.fetch("001", UserInfo.class).execute(); fetchedUserInfo.setName("李四"); fetchedUserInfo.setNickName("老李"); myBucket.store(info.getUid(), info).execute(); // 保存 新数据 fetchedUserInfo = myBucket.fetch("001", UserInfo.class).execute(); System.out.println("新数据:" + fetchedUserInfo); } catch (Exception e) { e.printStackTrace(); } // ################删除数据. try { myBucket.delete("001").execute(); fetchedUserInfo = myBucket.fetch("001", UserInfo.class).execute(); System.out.println("删除收数据." + fetchedUserInfo); } catch (Exception e) { e.printStackTrace(); } // 关闭。 client.shutdown(); } }
com.basho.riak.client.DefaultRiakClient@145edcf5 UserInfo [uid=001, name=张三, city=北京, nickName=null] 新数据:UserInfo [uid=001, name=张三, city=北京, nickName=null] 删除收数据.null
每次操作的时候都是通过执行Bucket的方法执行达到CRUD的操作。
StoreObject<IRiakObject> store(String key, byte[] value); StoreObject<IRiakObject> store(String key, String value); <T> StoreObject<T> store(T o); <T> StoreObject<T> store(String key, T o); FetchObject<IRiakObject> fetch(String key); <T> FetchObject<T> fetch(String key, Class<T> type); <T> FetchObject<T> fetch(T o); MultiFetchObject<IRiakObject> multiFetch(String[] keys); <T> MultiFetchObject<T> multiFetch(List<String> keys, Class<T> type); <T> MultiFetchObject<T> multiFetch(List<T> o); CounterObject counter(String counter); <T> DeleteObject delete(T o); DeleteObject delete(String key); StreamingOperation<String> keys() throws RiakException; <T> FetchIndex<T> fetchIndex(RiakIndex<T> index);
java通过使用Protocol Buffers方式调用Riak服务,直接操作对象进行CRUD。
有了这些,可以做一个简单的评论系统了。评论系统上面不需要事物,并且数量会随着业务增长,使用Rick可以平稳的进行扩展。
这个只是简单的,对Rick服务进行CRUD。最没有用到其他功能,同时没有关于key的设计。
Rick的其他功能,以后继续研究。