riak教程 java_Riak学习(2):java连接Riak服务,使用Protocol Buffers连接
1,介紹 Riak服務搭建,可以參考:
http://blog.csdn.net/freewebsys/article/details/12609995
Riak的接口訪問有兩種方式:
HTTP
Protocol Buffers
基于http的和pb的類似。
2,基于PB方式的調用
工程采用 maven,引入依賴:
代碼放在github上面了:
com.basho.riak
riak-client
1.4.0
com.basho.riak.protobuf
riak-pb
1.4.0
3,簡單的做一個表的CRUD
創(chuàng)建一個UserInfo類:
/**
* 用戶信息.
*/
public class UserInfo {
private String uid;
private String name;
private String city;
private String nickName;
...get set 方法忽略
使用Riak進行CRUD:只是簡單的將uid作為key存儲,沒有創(chuàng)建索引。
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();
}
// ################保存數(shù)據(jù) .
UserInfo info = new UserInfo();
info.setUid("001");
info.setName("張三");
info.setCity("北京");
try {
myBucket.store(info.getUid(), info).execute();
} catch (Exception e) {
e.printStackTrace();
}
// ################查詢數(shù)據(jù).
UserInfo fetchedUserInfo = null;
try {
fetchedUserInfo = myBucket.fetch("001", UserInfo.class).execute();
System.out.println(fetchedUserInfo);
} catch (Exception e) {
e.printStackTrace();
}
// ################修改數(shù)據(jù).
try {
fetchedUserInfo = myBucket.fetch("001", UserInfo.class).execute();
fetchedUserInfo.setName("李四");
fetchedUserInfo.setNickName("老李");
myBucket.store(info.getUid(), info).execute();
// 保存 新數(shù)據(jù)
fetchedUserInfo = myBucket.fetch("001", UserInfo.class).execute();
System.out.println("新數(shù)據(jù):" + fetchedUserInfo);
} catch (Exception e) {
e.printStackTrace();
}
// ################刪除數(shù)據(jù).
try {
myBucket.delete("001").execute();
fetchedUserInfo = myBucket.fetch("001", UserInfo.class).execute();
System.out.println("刪除收數(shù)據(jù)." + fetchedUserInfo);
} catch (Exception e) {
e.printStackTrace();
}
// 關閉。
client.shutdown();
}
}
運行結果:
com.basho.riak.client.DefaultRiakClient@145edcf5
UserInfo [uid=001, name=張三, city=北京, nickName=null]
新數(shù)據(jù):UserInfo [uid=001, name=張三, city=北京, nickName=null]
刪除收數(shù)據(jù).null
4,代碼分析
在Riak當中,可以簡單的把Bucket理解成一個表。
首先要創(chuàng)建一個這樣的Bucket,然后把數(shù)據(jù)按照key放進去。
數(shù)據(jù)類型可以是字符串,基本類型,或是對象(如UserInfo)。
每次操作的時候都是通過執(zhí)行Bucket的方法執(zhí)行達到CRUD的操作。
StoreObject store(String key, byte[] value);
StoreObject store(String key, String value);
StoreObject store(T o);
StoreObject store(String key, T o);
FetchObject fetch(String key);
FetchObject fetch(String key, Class type);
FetchObject fetch(T o);
MultiFetchObject multiFetch(String[] keys);
MultiFetchObject multiFetch(List keys, Class type);
MultiFetchObject multiFetch(List o);
CounterObject counter(String counter);
DeleteObject delete(T o);
DeleteObject delete(String key);
StreamingOperation keys() throws RiakException;
FetchIndex fetchIndex(RiakIndex index);
5,總結
java通過使用Protocol Buffers方式調用Riak服務,直接操作對象進行CRUD。
有了這些,可以做一個簡單的評論系統(tǒng)了。評論系統(tǒng)上面不需要事物,并且數(shù)量會隨著業(yè)務增長,使用Rick可以平穩(wěn)的進行擴展。
這個只是簡單的,對Rick服務進行CRUD。最沒有用到其他功能,同時沒有關于key的設計。
Rick的其他功能,以后繼續(xù)研究。
文章參考:
http://docs.basho.com/riak/latest/dev/taste-of-riak/java/
總結
以上是生活随笔為你收集整理的riak教程 java_Riak学习(2):java连接Riak服务,使用Protocol Buffers连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JQuery之Ajax方法
- 下一篇: 本地mysql设置成DMZ主机远程访问的