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

创建一个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

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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值