绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
riak教程 java_Riak学习(2):java连接Riak服务,使用Protocol Buff
2022-04-26 11:18:27

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 TS
创建时间:2022-04-26 11:11:26
Riak TS
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • gaokeke123
    专家
戳我,来吐槽~