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/
riak教程 java_Riak学习(2):java连接Riak服务,使用Protocol Buffers连接相关推荐
- Riak学习(2):java连接Riak服务,使用Protocol Buffers连接
1,介绍 Riak服务搭建,可以参考: http://blog.csdn.net/freewebsys/article/details/12609995 Riak的接口访问有两种方式: HTTP Pr ...
- riak教程 java_在Erlang(和Riak)中开发应用程序时的良好实践?
查看钢筋: https://github.com/basho/rebar 用于打包,模板和管理Erlang / OTP应用程序的版本 . 您将找到有关如何使用它的完整教程 . 首先查看 this tu ...
- Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受
一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类 Serve ...
- JAVA层HIDL服务的获取原理-Android10.0 HwBinder通信原理(九)
摘要:本节主要来讲解Android10.0 JAVA层HIDL服务的获取原理 阅读本文大约需要花费19分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的 ...
- 是时候该了解一波Protocol Buffers了[Java]
前言 Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 它不依赖于语言和平台并且可扩展性极强.现阶段官方 ...
- tcp连接之半连接攻击和全连接攻击总结
众所周知,tcp通信是一个面向连接的过程,客户端要和服务端连接,必须进行连接才能进行通信.在tcp连接中,有两种连接攻击方式,是半连接攻击机和全连接攻击,对此搜积相关资料做了一个总结. <1&g ...
- 最适合Java初学者学习的Java零基础入门教程
各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java. 因此,也是吸引了不少年轻人投入到Java的学习之中. 所以,今天 ...
- 适合Java零基础小白学习的Java零基础教程
很多Java零基础小白,在刚刚快入门的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英文词汇,然后遇见一些未知的困难,让自己打到癫狂状态,逐渐迷失自我放弃Java,为了解决这 ...
- 2023最新java学习教程(学习路线+课程大纲+视频教程+面试题+学习工具)
2023最新java学习教程汇总(学习路线+课程大纲+视频教程+面试题+学习工具) 目录 一.首先要了解什么是JAVA? 二.Java发展及就业前景分析 三.Java学习路线图 四.Java课程大纲 ...
最新文章
- Python 速度慢,试试这个方法提高 1000 倍
- [小程序]微信小程序登陆并获取用户信息
- yum源安装php报错缺少libmcrypt.so.4()(64bit)库
- UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
- NSData的同步下载与NSConnection的同步下载
- iptv鉴权 php,小白的IPTV折腾教程-双网融合/IPTV共享 - OPENWRT专版 - 恩山无线论坛 - Powered by Discuz!...
- java 获取 国家_Java中Locale.getDefault()方法获取本地国家代码
- 服务器上线运行正常但不能上网,网线是好的,插笔记本正常上网,插在服务器上却不能上网的解决方法...
- 10个谈话技巧让你平步青云
- 基于Python的QQ音乐音频图片搜索系统设计与实现 毕业论文+源码
- Collections集合
- 学无止境,学无止境啊
- Android 加速度传感器的使用详解
- 数学难题html5小游戏答案,数学难题大全及答案
- Lucene深入浅出
- AES加密算法在Java中的应用
- kindeditor上传图片配置upload_json.jsp文件出现500错误
- windowslinux服务器之间的文件传输方法汇总
- Web前端开发 移动端开发(快速入门)
- 微信小程序---input 后面加单位