看这篇文章的同学,redis
相信你一定很熟悉了,ssdb
是一个功能类似于redis
,性能稍弱于redis
的高性能数据库,主要是可以使用磁盘代替内存,使得小内存可以胜任请求不高的大部分场景,从而节约资源。ssdb
官方是这样评价的 : 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.
1. 特性
- 替代 Redis 数据库, Redis 的 100 倍容量
- LevelDB 网络支持, 使用 C/C++ 开发
- Redis API 兼容, 支持 Redis 客户端
- 适合存储集合数据, 如 list, hash, zset...
- 客户端 API 支持的语言包括: C++, PHP, Python, Java, Go
- 持久化的队列服务
- 主从复制, 负载均衡
支持多种api
,比如php
使用:
<?php
require_once('SSDB.php');
$ssdb = new SimpleSSDB('127.0.0.1', 8888);
$resp = $ssdb->set('key', '123');
$resp = $ssdb->get('key');
echo $resp; // output: 123
2. 安装
wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip
unzip master
cd ssdb-master
make
# optional, install ssdb in /usr/local/ssdb
sudo make install
3. 启动
# start master
./ssdb-server ssdb.conf
# or start as daemon
./ssdb-server -d ssdb.conf
4. 与redis
性能对比
5. java 读写ssdb
java
操作ssdb
需要的maven
依赖:
<dependency>
<groupId>com.lovver</groupId>
<artifactId>ssdbj</artifactId>
<version>0.0.1</version>
</dependency>
java
读取ssdb
,有两种方式,分别是单连接和连接池的方式,亲测以下方式都可以用:
1 SSDBConnection
单连接方式
@Test
public void test(){
SSDBDriver dd= new SSDBDriver();
Properties info = new Properties();
info.setProperty("SSDB_HOST", "192.168.1.1");
info.setProperty("SSDB_PORT", "8888");
// 密码
info.setProperty("password", "ssdb.test");
info.setProperty("loginTimeout", "300");
info.setProperty("tcpKeepAlive", "true");
info.setProperty("protocolName", "ssdb");
info.setProperty("protocolVersion", "1.0");
SSDBConnection conn = null;
try{
conn = dd.connect(info);
System.out.println(conn);
// 写入数据到ssdb
ArrayList<byte[]> setParams=new ArrayList<byte[]>(){
{
add("joliny".getBytes());
add("是的发生地发生1231sdfsfg23".getBytes());
}
};
conn.execute("set",setParams);
// 从ssdb读取数据
List params=new ArrayList();
params.add("joliny".getBytes());
BaseResultSet<byte[]> rs=conn.execute("get",params);
System.out.println(new String(rs.getResult()));
} catch (SSDBException e) {
e.printStackTrace();
}finally {
if(conn != null){
conn.close();
}
}
}
2 SSDBPoolConnection
连接池方式
多线程通常需要用连接池的方式,提高效率。
import com.lovver.ssdbj.core.BaseResultSet;
import com.lovver.ssdbj.core.SSDBDriver;
import com.lovver.ssdbj.core.impl.SSDBConnection;
import com.lovver.ssdbj.exception.SSDBException;
import com.lovver.ssdbj.pool.SSDBDataSource;
import com.lovver.ssdbj.pool.SSDBPoolConnection;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* @Author: keguang
* @Date: 2020/2/17 16:23
* @version: v1.0.0
* @description:
*/
public class SSDBTest {
private static SSDBDataSource ds=null;
static{
Properties info = new Properties();
info.setProperty("password", "ssdb.test");
info.setProperty("loginTimeout", "300");
info.setProperty("tcpKeepAlive", "true");
info.setProperty("protocolName", "ssdb");
info.setProperty("protocolVersion", "1.0");
ds = new SSDBDataSource("192.168.1.1",8888,null,info);
}
@Test
public void test2(){
SSDBPoolConnection conn=null;
try {
conn = ds.getConnection();
System.out.println(conn);
ArrayList<byte[]> setParams=new ArrayList<byte[]>(){
{
add("language".getBytes());
add("zh-CN".getBytes());
}
};
conn.execute("set",setParams);
ArrayList params=new ArrayList();
params.add("language".getBytes());
BaseResultSet<byte[]> rs= conn.execute("get",params);
if(rs.getResult() == null){
System.out.println("null");
}
System.out.println(new String(rs.getResult()));
} catch (Exception e) {
e.printStackTrace();
}finally {
if (conn != null){
conn.close();
}
}
}
}
文章评论