MemoDB
MemoDB是一个轻量级且简单的键值存储应用,启发于Redis,使用Go语言进行开发,能够做到开包即用的效果。
特点:
- 支持任意类型
- 支持并发操作
- 支持视图字符串输出
- 支持过期删除,单位为秒
- 支持周期快照存储,json字符串压缩文件
- 支持快照文件重载
导入与使用
导入的两种方式
- 使用go命令
go get "github.com/iddxc/memodb"
- 使用在源代码中使用
import "github.com/iddxc/memodb"
进行导入,并运行go mod tidy
进行环境管理
启用快照和过期删除功能
package main
import (
"github.com/iddxc/memodb"
)
func main() {
store := memodb.New("test.db", 20)
count := 1000
rand.Seed(time.Now().Unix())
for i := 0; i < count; i++ {
r := rand.Intn(100)
store.Put(strconv.Itoa(i), r)
store.Expire(strconv.Itoa(i), r)
}
var wait sync.WaitGroup
wait.Add(1)
go store.Run()
defer wait.Wait()
fmt.Println(store.View(10))
}
该功能做到每20秒进行快照存储1次,并且对存在过期时间限制元素进行判断
String
String: key-value key为字符串类型且为唯一,而value可以为任意类型,支持过期删除
package main
import (
"fmt"
"strconv"
"github.com/iddxc/memodb"
)
func main() {
var stat bool
var inter interface{
}
memo := memodb.New("test.db", 0)
count := 100
// 设置键值对
for i := 0; i < count; i++ {
memo.Put(strconv.Itoa(i), i)
}
// 获取存在的值
inter, stat = memo.Get("66")
if stat {
assert.Equal(t, "66", fmt.Sprint(inter))
}
// 获取不存在的值
inter, stat = memo.Get("666")
if stat {
assert.Equal(t, "66", fmt.Sprint(inter))
}
// 获取String键值对的前10行视图字符串
text := memo.View(10)
fmt.Println(text)
// 删除指定建
memo.Remove("10")
_, stat = memo.Get("10")
assert.Equal(t, stat, false)
// 获取所有键值对的键
keys := memo.