看这篇文章的同学,redis相信你一定很熟悉了,ssdb是一个功能类似于redis,性能稍弱于redis的高性能数据库,主要是可以使用磁盘代替内存,使得小内存可以胜任请求不高的大部分场景,
看这篇文章的同学,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,有两种方式,分别是单连接和连接池的方式,亲测以下方式都可以用:
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(); } } }
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(); } } } }
以上就是java使用内存数据库ssdb的步骤的详细内容,更多关于java使用内存数据库ssdb的资料请关注易盾网络其它相关文章!