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
创建一个UserInfo类:
/**
* 用户信息.
*/
public class UserInfo {undefined
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 {undefined
public static void main(String[] args) throws IOException {undefined
IRiakClient client = null;
try {// 使用pbc方式连接,而不是http,在/etc/riak/app.config
client = RiakFactory.pbcClient("127.0.0.1", 8087);
} catch (RiakException e) {undefined
e.printStackTrace();
}
// 显示.
System.out.println(client);
Bucket myBucket = null;
String bucketName = "userInfo";
try {undefined
myBucket = client.fetchBucket(bucketName).execute();
if (myBucket == null) {undefined
myBucket = client.createBucket(bucketName).execute();
}
} catch (RiakRetryFailedException e) {undefined
e.printStackTrace();
}
// ################保存数据 .
UserInfo info = new UserInfo();
info.setUid("001");
info.setName("张三");
info.setCity("北京");
try {undefined
myBucket.store(info.getUid(), info).execute();
} catch (Exception e) {undefined
e.printStackTrace();
}
// ################查询数据.
UserInfo fetchedUserInfo = null;
try {undefined
fetchedUserInfo = myBucket.fetch("001", UserInfo.class).execute();
System.out.println(fetchedUserInfo);
} catch (Exception e) {undefined
e.printStackTrace();
}
// ################修改数据.
try {undefined
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) {undefined
e.printStackTrace();
}
// ################删除数据.
try {undefined
myBucket.delete("001").execute();
fetchedUserInfo = myBucket.fetch("001", UserInfo.class).execute();
System.out.println("删除收数据." + fetchedUserInfo);
} catch (Exception e) {undefined
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
4,代码分析
在Riak当中,可以简单的把Bucket理解成一个表。
首先要创建一个这样的Bucket,然后把数据按照key放进去。
数据类型可以是字符串,基本类型,或是对象(如UserInfo)。
每次操作的时候都是通过执行Bucket的方法执行达到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。
有了这些,可以做一个简单的评论系统了。评论系统上面不需要事物,并且数量会随着业务增长,使用Rick可以平稳的进行扩展。
这个只是简单的,对Rick服务进行CRUD。没有用到其他功能,同时没有关于key的设计。
Rick的其他功能,以后继续研究。
文章参考:
http://docs.basho.com/riak/latest/dev/taste-of-riak/java/
————————————————
版权声明:本文为CSDN博主「楼上雅坐」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_34862449/article/details/114774693
riak教程 java_Riak学习(2):java连接Riak服务,使用Protocol Buff
分享好友
分享这个小栈给你的朋友们,一起进步吧。
订阅须知
• 所有用户可根据关注领域订阅专区或所有专区
• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询
• 专区发布评论属默认订阅所评论专区(除付费小栈外)
技术专家
查看更多- gaokeke123专家