当前位置: 首页 > 工具软件 > ssdb4j > 使用案例 >

Redis 替代品SSDB Java客户端

锺离嘉茂
2023-12-01

SSDB支持 Redis 网络协议, 所以你可以用 Redis 的客户端来连接 SSDB 服务器. 但是, 使用 SSDB 客户端是最高效的方式。所有的 SSDB 客户端 API 都是支持二进制数据的, 二进制数据即是字符串,字符串就是二进制数据。SSDB 源码仓库中, 内置了许多语言的客户端, 这些便是所谓的官方客户端

关于java客户端,有如下几种:

1.官方客户端

项目地址:https://github.com/ssdb/javassdb

文档说明:http://ssdb.io/docs/java/

实例代码参考:Demo.java

2.ssdb4j

SSDB的Java驱动,实现了连接池,主从。连接池使用commons-pool。

项目地址:https://github.com/ideawu/ssdb

maven  dependency:

<dependency>
    <groupId>org.nutz</groupId>
    <artifactId>ssdb4j</artifactId>
    <version>9.3</version>
</dependency>
实例代码参考:SimpleClientTest.java
3.另一个ssdbj

SSDBJ是一款支持SSDB NoSQL数据库集群的驱动。
功能: 
1、ssdb数据库连接池 
2、支持多个SSDB数据库的master-slave集群 
3、支持集群内部的master和slave的负载均衡,负载均衡暂时支持4中方式(Random round_robin round_robin_weight random_weight) 
4、实现了读写分离 
5、支持集群内slave获取not_found的情况下从master再次直接获取 
6、支持同步未完成时slave读取error的情况下,从master尝试或者重复在slave中尝试。尝试次数可以再配置文件中修改。 
具体参考 src/test/resource/ssdbj.xml
ssdbj提供了3中使用方式:
1、直接手动创建连接,可以参考src/test/java/SSDBJTest.java 
2、使用单库连接池,可以参考 src/test/java/SSDBPoolTest.java 
3、使用集群模式,可以参考src/test/java/SSDBClusterTest.java 
集群模式的配置文件可以参考src/test/resource/ssdbj.xml

项目地址:http://git.oschina.net/jbakwd/ssdbj

下面以jbakwd的ssdbj为例。需要下载源码添加到本地maven仓库中。

<dependency>
			<groupId>com.lovver</groupId>
			<artifactId>ssdbj</artifactId>
			<version>0.0.1</version>
		</dependency>
集群配置:ssdbj.xml

<?xml version="1.0" encoding="UTF-8"?>
<ssdbj>
	<!-- 定义节点实例,并制定是否为master,以下为双主配置-->
	<ssdb_node id="ssdb_db1" master="true" host="192.168.36.54"
		port="8888" user="" password="" loginTimeout="3" tcpKeepAlive="true"
		protocolName="ssdb" maxTotal="200" maxIdle="10" minIdle="5"
		testWhileIdle="true" />
	<ssdb_node id="ssdb_db2" master="true" host="192.168.36.189"
		port="8888" user="" password="" loginTimeout="3" tcpKeepAlive="true"
		protocolName="ssdb" maxTotal="200" maxIdle="10" minIdle="5"
		testWhileIdle="true" />
	<!-- 集群定义 -->
	<clusters>
		<cluster id="ssdb_cluster" notfound_master_retry="true"
			error_retry_times="3" error_master_retry="true" retry_interval="500"
			balance="random_weight">
			<!-- 指定上面节点,支持权重,读写模式 -->
			<ssdb_node weight="1" rwMode="rw">ssdb_db1</ssdb_node>
			<ssdb_node weight="2" rwMode="rw">ssdb_db2</ssdb_node>
		</cluster>
	</clusters>
</ssdbj>
测试代码:SSDBClusterTest.java

package cn.slimsmart.redis.demo.ssdb;

import com.lovver.ssdbj.SSDBJ;
import com.lovver.ssdbj.core.BaseResultSet;
import com.lovver.ssdbj.core.SSDBCmd;

@SuppressWarnings("unchecked")
public class SSDBClusterTest {
	public static void main(String[] args) throws Exception {
        //解析ssdbj.xml,查询ssdb_cluster,找到一个实例执行get key命令
		//SSDBCmd 支持ssdb命令
		//executeUpdate 添加更新
		BaseResultSet<byte[]> rs= SSDBJ.execute("ssdb_cluster",SSDBCmd.GET,"key");
		System.out.println(rs.getStatus());
        System.out.println(new String(rs.getResult()));
        
        if(SSDBJ.executeUpdate("ssdb_cluster",SSDBCmd.SET,"key","value22")){
        	rs= SSDBJ.execute("ssdb_cluster",SSDBCmd.GET,"key");
        	System.out.println(rs.getStatus());
            System.out.println(new String(rs.getResult()));
        }else{
        	System.out.println("executeUpdate fail.");
        }
	}
}

 类似资料: