RocksDB是使用C ++编写的嵌入式kv存储引擎,其键值均允许使用二进制流。由Facebook基于levelDB开发,提供向后兼容的levelDB API。
RocksDB针对Flash存储进行优化,延迟极小.RocksDB使用LSM存储引擎,纯C ++编写.Java版本RocksJava正在开发中。参见RocksJavaBasic。
RocksDB依靠大量灵活的配置,使之能针对不同的生产环境进行调优,包括直接使用内存,使用闪存,使用硬盘或者HDFS。支持使用不同的压缩算法,并且有一套完整的工具供生产和调试使用。
首先RocksDB如果是java依赖,需要添加maven
<dependency>
<groupId>org.rocksdb</groupId>
<artifactId>rocksdbjni</artifactId>
<version>5.5.1</version>
</dependency>
对于现在而言,RocksDB不适合java项目,但是更适合go项目,那么现在就用go语言进行举例
设置缓存方法与存储类型
package cache
type Cache interface {
Set(string, []byte) error
Get(string) ([]byte, error)
Del(string) error
GetStat() Stat
}
package cache
import "C"
type rocksdbCache struct {
db *C.rocksdb_t
ro *C.rocksdb_readoptions_t
wo *C.rocksdb_writeoptions_t
e *C.char
}
package cache
import "log"
func New(typ string) Cache {
var c Cache
if typ == "rocksdb" {
c = newRocksdbCache()
}
if c == nil {
panic("unknown cache type " + typ)
}
log.Println(typ, "ready to serve")
return c
}
RocksDB 通过key获取
package cache
import "C"
import (
"errors"
"unsafe"
)
func (c *rocksdbCache) Get(key string) ([]byte, error) {
k := C.CString(key)
defer C.free(unsafe.Pointer(k))
var length C.size_t
v := C.rocksdb_get(c.db, c.ro, k, C.size_t(len(key)), &length, &c.e)
if c.e != nil {
return nil, errors.New(C.GoString(c.e))
}
defer C.free(unsafe.Pointer(v))
return C.GoBytes(unsafe.Pointer(v), C.int(length)), nil
}
RocksDB插入
package cache
import "C"
import (
"errors"
"unsafe"
)
func (c *rocksdbCache) Set(key string, value []byte) error {
k := C.CString(key)
defer C.free(unsafe.Pointer(k))
v := C.CBytes(value)
defer C.free(v)
C.rocksdb_put(c.db, c.wo, k, C.size_t(len(key)), (*C.char)(v), C.size_t(len(value)), &c.e)
if c.e != nil {
return errors.New(C.GoString(c.e))
}
return nil
}
RocksDB删除
package cache
import "C"
import (
"errors"
"unsafe"
)
func (c *rocksdbCache) Del(key string) error {
k := C.CString(key)
defer C.free(unsafe.Pointer(k))
C.rocksdb_delete(c.db, c.wo, k, C.size_t(len(key)), &c.e)
if c.e != nil {
return errors.New(C.GoString(c.e))
}
return nil
}
参考:https://rocksdb.org.cn/doc.html