java使用內(nèi)存數(shù)據(jù)庫ssdb

看這篇文章的同學(xué),redis相信你一定很熟悉了,ssdb是一個(gè)功能類似于redis,性能稍弱于redis的高性能數(shù)據(jù)庫,主要是可以使用磁盤代替內(nèi)存,使得小內(nèi)存可以勝任請(qǐng)求不高的大部分場(chǎng)景,從而節(jié)約資源。ssdb官方是這樣評(píng)價(jià)的 : 一個(gè)高性能的支持豐富數(shù)據(jù)結(jié)構(gòu)的 NoSQL 數(shù)據(jù)庫, 用于替代 Redis.

ssdb官方鏈接

1. 特性

  • 替代 Redis 數(shù)據(jù)庫, Redis 的 100 倍容量
  • LevelDB 網(wǎng)絡(luò)支持, 使用 C/C++ 開發(fā)
  • Redis API 兼容, 支持 Redis 客戶端
  • 適合存儲(chǔ)集合數(shù)據(jù), 如 list, hash, zset...
  • 客戶端 API 支持的語言包括: C++, PHP, Python, Java, Go
  • 持久化的隊(duì)列服務(wù)
  • 主從復(fù)制, 負(fù)載均衡

支持多種api,比如php使用:

<?php
require_once('SSDB.php');
ssdb = new SimpleSSDB('127.0.0.1', 8888);resp = ssdb->set('key', '123');resp = ssdb->get('key');
echoresp; // output: 123
PHP

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
Bash

3. 啟動(dòng)

# start master
./ssdb-server ssdb.conf

# or start as daemon
./ssdb-server -d ssdb.conf
Bash

4. 與redis性能對(duì)比

5. java 讀寫ssdb

java操作ssdb需要的maven依賴:

<dependency>
    <groupId>com.lovver</groupId>
    <artifactId>ssdbj</artifactId>
    <version>0.0.1</version>
</dependency>
XML

java讀取ssdb,有兩種方式,分別是單連接和連接池的方式,親測(cè)以下方式都可以用:

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);

        // 寫入數(shù)據(jù)到ssdb
        ArrayList<byte[]> setParams=new ArrayList<byte[]>(){
            {
                add("joliny".getBytes());
                add("是的發(fā)生地發(fā)生1231sdfsfg23".getBytes());
            }
        };
        conn.execute("set",setParams);

        // 從ssdb讀取數(shù)據(jù)
        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();
        }
    }

}
Java

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();
            }
        }
    }
}


作者:柯廣的網(wǎng)絡(luò)日志

微信公眾號(hào):Java大數(shù)據(jù)與數(shù)據(jù)倉庫