go键值对缓存应用:MemoDB

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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值