golang高性能NoSQL数据库插件库ledisdb的使用

Golang高性能NoSQL数据库插件库LedisDB的使用

LedisDB简介

LedisDB是一个用Go编写的高性能NoSQL数据库库和服务器。它类似于Redis,但将数据存储在磁盘上。它支持多种数据结构,包括kv、list、hash、zset和set。

Build Status

主要特性

  • 丰富的数据结构:KV、List、Hash、ZSet、Set
  • 数据存储不受RAM限制
  • 支持多种后端:LevelDB、goleveldb、RocksDB、RAM
  • 支持Lua脚本
  • 支持过期和TTL
  • 可以通过redis-cli管理
  • 易于嵌入到您自己的Go应用程序中
  • 支持HTTP API,JSON/BSON/msgpack输出
  • 复制功能保证数据安全
  • 提供加载、转储和修复数据库的工具
  • 支持集群
  • 认证支持

安装与使用

从源码构建

git clone git@github.com:ledisdb/ledisdb.git
cd ledisdb

# 设置构建和运行环境
source dev.sh

make
make test

构建完成后,所有二进制文件将位于./bin目录中。

LevelDB支持

  1. 安装leveldb和snappy:
    sudo sh tools/build_leveldb.sh
    
  2. dev.sh中设置LEVELDB_DIRSNAPPY_DIR为实际安装路径
  3. 重新构建:make clean && make

RocksDB支持

  1. 安装rocksdb(5.1+)和snappy
  2. dev.sh中设置ROCKSDB_DIRSNAPPY_DIR为实际安装路径
  3. 重新构建:make clean && make

选择存储数据库

LedisDB现在支持goleveldb、leveldb、rocksdb和RAM,默认使用goleveldb。

选择存储数据库非常简单:

  • 在服务器配置文件中设置:db_name = "leveldb"
  • 通过命令行标志设置:ledis -config=/etc/ledis.conf -db_name=leveldb

命令行标志设置会覆盖配置文件设置。

示例代码

服务器示例

// 设置运行环境(如果尚未设置)
source dev.sh

./bin/ledis -config=/etc/ledis.conf

// 另一个shell
./bin/ledis cli -p 6380

ledis 127.0.0.1:6380> set a 1
OK
ledis 127.0.0.1:6380> get a
"1"

// 使用curl
curl http://127.0.0.1:11181/SET/hello/world
→ {"SET":[true,"OK"]}

curl http://127.0.0.1:11181/0/GET/hello?type=json
→ {"GET":"world"}

包使用示例

import (
    lediscfg "github.com/ledisdb/ledisdb/config"
    "github.com/ledisdb/ledisdb/ledis"
)

// 使用Ledis的默认配置
cfg := lediscfg.NewConfigDefault()
l, _ := ledis.Open(cfg)
db, _ := l.Select(0)

db.Set(key, value)

db.Get(key)

复制示例

ledis cli -p 6381 

ledis 127.0.0.1:6381> slaveof 127.0.0.1 6380
OK

注意事项

  • 在运行时更改后端数据库非常危险。如果这样做,不能保证数据验证。
  • Go版本要求 >= 1.11

集群支持

LedisDB使用名为xcodis的代理来支持集群。

性能

有关性能基准测试的详细信息,请参考项目wiki中的benchmark部分。


更多关于golang高性能NoSQL数据库插件库ledisdb的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang高性能NoSQL数据库插件库ledisdb的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


LedisDB - Golang高性能NoSQL数据库插件库使用指南

什么是LedisDB

LedisDB是一个用Go编写的高性能NoSQL数据库,它提供了类似Redis的API但底层使用LevelDB/RocksDB等存储引擎,具有以下特点:

  • 支持丰富的数据结构:String, Hash, List, Set, Sorted Set
  • 高性能:基于高效的存储引擎
  • 低内存占用:相比Redis内存需求更低
  • 持久化:数据自动持久化到磁盘
  • 嵌入式:可作为库直接集成到应用中

安装

go get github.com/ledisdb/ledisdb

基本使用示例

1. 初始化数据库

package main

import (
	"fmt"
	"github.com/ledisdb/ledisdb/config"
	"github.com/ledisdb/ledisdb/ledis"
)

func main() {
	// 配置数据库
	cfg := config.NewConfigDefault()
	cfg.DataDir = "/tmp/ledisdb_data" // 设置数据存储目录
	
	// 打开数据库
	db, err := ledis.Open(cfg)
	if err != nil {
		panic(err)
	}
	defer db.Close()
	
	// 选择数据库(类似Redis的select命令)
	ledisDB, err := db.Select(0)
	if err != nil {
		panic(err)
	}
	
	// 下面可以使用ledisDB进行操作...
}

2. 字符串操作

// 设置键值
err = ledisDB.Set([]byte("name"), []byte("LedisDB"))
if err != nil {
    panic(err)
}

// 获取值
value, err := ledisDB.Get([]byte("name"))
if err != nil {
    panic(err)
}
fmt.Printf("Got value: %s\n", string(value))

// 删除键
_, err = ledisDB.Del([]byte("name"))
if err != nil {
    panic(err)
}

3. Hash操作

// 设置Hash字段
err = ledisDB.HSet([]byte("user:1"), []byte("name"), []byte("Alice"))
if err != nil {
    panic(err)
}

// 获取Hash字段
name, err := ledisDB.HGet([]byte("user:1"), []byte("name"))
if err != nil {
    panic(err)
}
fmt.Printf("User name: %s\n", string(name))

// 获取所有Hash字段
allFields, err := ledisDB.HGetAll([]byte("user:1"))
if err != nil {
    panic(err)
}
for k, v := range allFields {
    fmt.Printf("%s: %s\n", string(k), string(v))
}

4. List操作

// 从左侧推入元素
_, err = ledisDB.LPush([]byte("mylist"), []byte("item1"), []byte("item2"))
if err != nil {
    panic(err)
}

// 获取列表长度
length, err := ledisDB.LLen([]byte("mylist"))
if err != nil {
    panic(err)
}
fmt.Printf("List length: %d\n", length)

// 从左侧弹出元素
item, err := ledisDB.LPop([]byte("mylist"))
if err != nil {
    panic(err)
}
fmt.Printf("Popped item: %s\n", string(item))

高级特性

批量操作

batch := ledisDB.NewBatch()
defer batch.Close()

batch.Put([]byte("key1"), []byte("value1"))
batch.Put([]byte("key2"), []byte("value2"))
batch.Delete([]byte("key3"))

err = batch.Commit()
if err != nil {
    panic(err)
}

事务支持

txn, err := ledisDB.Begin()
if err != nil {
    panic(err)
}

err = txn.Set([]byte("tx_key"), []byte("tx_value"))
if err != nil {
    txn.Rollback()
    panic(err)
}

err = txn.Commit()
if err != nil {
    panic(err)
}

迭代器

iter, err := ledisDB.RangeIterator([]byte("a"), []byte("z"), store.RangeClose)
if err != nil {
    panic(err)
}
defer iter.Close()

for iter.Valid() {
    key := iter.Key()
    value := iter.Value()
    fmt.Printf("%s: %s\n", string(key), string(value))
    iter.Next()
}

性能优化建议

  1. 批量操作:尽量使用批量操作而不是单条操作
  2. 合理配置:根据硬件调整配置参数(缓存大小等)
  3. 避免大value:将大value拆分为多个小value
  4. 使用合适的数据结构:根据场景选择最合适的数据类型

适用场景

LedisDB适合以下场景:

  • 需要嵌入式NoSQL解决方案
  • 需要比Redis更低的内存占用
  • 需要持久化保证
  • Go语言项目中需要高性能本地存储

总结

LedisDB为Go开发者提供了一个高性能、低内存占用的嵌入式NoSQL解决方案,API设计类似Redis,学习成本低。它特别适合需要本地持久化存储的中小型应用场景。

回到顶部