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连接相关推荐

  1. Riak学习(2):java连接Riak服务,使用Protocol Buffers连接

    1,介绍 Riak服务搭建,可以参考: http://blog.csdn.net/freewebsys/article/details/12609995 Riak的接口访问有两种方式: HTTP Pr ...

  2. riak教程 java_在Erlang(和Riak)中开发应用程序时的良好实践?

    查看钢筋: https://github.com/basho/rebar 用于打包,模板和管理Erlang / OTP应用程序的版本 . 您将找到有关如何使用它的完整教程 . 首先查看 this tu ...

  3. Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受

    一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类         Serve ...

  4. JAVA层HIDL服务的获取原理-Android10.0 HwBinder通信原理(九)

    摘要:本节主要来讲解Android10.0 JAVA层HIDL服务的获取原理 阅读本文大约需要花费19分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的 ...

  5. 是时候该了解一波Protocol Buffers了[Java]

    前言 Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 它不依赖于语言和平台并且可扩展性极强.现阶段官方 ...

  6. tcp连接之半连接攻击和全连接攻击总结

    众所周知,tcp通信是一个面向连接的过程,客户端要和服务端连接,必须进行连接才能进行通信.在tcp连接中,有两种连接攻击方式,是半连接攻击机和全连接攻击,对此搜积相关资料做了一个总结. <1&g ...

  7. 最适合Java初学者学习的Java零基础入门教程

    各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java. 因此,也是吸引了不少年轻人投入到Java的学习之中. 所以,今天 ...

  8. 适合Java零基础小白学习的Java零基础教程

    很多Java零基础小白,在刚刚快入门的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英文词汇,然后遇见一些未知的困难,让自己打到癫狂状态,逐渐迷失自我放弃Java,为了解决这 ...

  9. 2023最新java学习教程(学习路线+课程大纲+视频教程+面试题+学习工具)

    2023最新java学习教程汇总(学习路线+课程大纲+视频教程+面试题+学习工具) 目录 一.首先要了解什么是JAVA? 二.Java发展及就业前景分析 三.Java学习路线图 四.Java课程大纲 ...

最新文章

  1. Python 速度慢,试试这个方法提高 1000 倍
  2. [小程序]微信小程序登陆并获取用户信息
  3. yum源安装php报错缺少libmcrypt.so.4()(64bit)库
  4. UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  5. NSData的同步下载与NSConnection的同步下载
  6. iptv鉴权 php,小白的IPTV折腾教程-双网融合/IPTV共享 - OPENWRT专版 - 恩山无线论坛 - Powered by Discuz!...
  7. java 获取 国家_Java中Locale.getDefault()方法获取本地国家代码
  8. 服务器上线运行正常但不能上网,网线是好的,插笔记本正常上网,插在服务器上却不能上网的解决方法...
  9. 10个谈话技巧让你平步青云
  10. 基于Python的QQ音乐音频图片搜索系统设计与实现 毕业论文+源码
  11. Collections集合
  12. 学无止境,学无止境啊
  13. Android 加速度传感器的使用详解
  14. 数学难题html5小游戏答案,数学难题大全及答案
  15. Lucene深入浅出
  16. AES加密算法在Java中的应用
  17. kindeditor上传图片配置upload_json.jsp文件出现500错误
  18. windowslinux服务器之间的文件传输方法汇总
  19. Web前端开发 移动端开发(快速入门)
  20. 微信小程序---input 后面加单位

热门文章

  1. 计算机视觉与深度学习(12)
  2. Java 类加载器、反射
  3. 温度补偿计算公式_热补偿计算实例
  4. 计算机专业英语教学反思,高中英语课堂教学反思
  5. 计算机科学家书法,把书法和菜名结合,AI 模型创作独特的中国书法艺术
  6. matlab将surfer格式转化矩阵,matlab调用surfer
  7. SQLServer 2012 Always on配置全过程
  8. android 中文编码
  9. 【C#】VS编写简单的网游客户端
  10. 接口请求返回的状态码总览