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上面了: https://github.c

1,介绍

Riak服务搭建,可以参考:
http://blog.csdn.net/freewebsys/article/details/12609995


Riak的接口访问有两种方式:
HTTP
Protocol Buffers

基于http的和pb的类似。


2,基于PB方式的调用

工程采用 maven,引入依赖:

代码放在github上面了:

https://github.com/freewebsys/riak_demo


<dependencies>
		<dependency>
			<groupId>com.basho.riak</groupId>
			<artifactId>riak-client</artifactId>
			<version>1.4.0</version>
		</dependency>
		<dependency>
			<groupId>com.basho.riak.protobuf</groupId>
			<artifactId>riak-pb</artifactId>
			<version>1.4.0</version>
		</dependency>
</dependencies>


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<IRiakObject> store(String key, byte[] value);
    StoreObject<IRiakObject> store(String key, String value);
    <T> StoreObject<T> store(T o);
    <T> StoreObject<T> store(String key, T o);
    FetchObject<IRiakObject> fetch(String key);
    <T> FetchObject<T> fetch(String key, Class<T> type);
    <T> FetchObject<T> fetch(T o);
    MultiFetchObject<IRiakObject> multiFetch(String[] keys);
    <T> MultiFetchObject<T> multiFetch(List<String> keys, Class<T> type);
    <T> MultiFetchObject<T> multiFetch(List<T> o);
    CounterObject counter(String counter);
    <T> DeleteObject delete(T o);
    DeleteObject delete(String key);
    StreamingOperation<String> keys() throws RiakException;
    <T> FetchIndex<T> fetchIndex(RiakIndex<T> index);

5,总结

java通过使用Protocol Buffers方式调用Riak服务,直接操作对象进行CRUD。

有了这些,可以做一个简单的评论系统了。评论系统上面不需要事物,并且数量会随着业务增长,使用Rick可以平稳的进行扩展。

这个只是简单的,对Rick服务进行CRUD。最没有用到其他功能,同时没有关于key的设计。

Rick的其他功能,以后继续研究。


文章参考:
http://docs.basho.com/riak/latest/dev/taste-of-riak/java/

目录
相关文章
|
22天前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
211 0
|
2月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
140 1
|
29天前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
158 0
|
1月前
|
JSON Java 数据格式
java调用服务报错400
java调用服务报错400
67 6
java调用服务报错400
|
29天前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
154 7
|
1月前
|
JSON Java 数据格式
java调用服务报错415 Content type ‘application/octet-stream‘ not supported
java调用服务报错415 Content type ‘application/octet-stream‘ not supported
122 6
|
2月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
64 5
|
2月前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
121 5
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
SQL Java 关系型数据库
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
196 0