1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-04 19:17:37 +08:00

cache: switch to leveldb

This commit is contained in:
wdvxdr 2022-08-31 21:07:18 +08:00
parent 96e6397636
commit 2f92146092
2 changed files with 15 additions and 59 deletions

View File

@ -2,14 +2,9 @@
package cache package cache
import ( import (
"fmt"
"sync"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/syndtr/goleveldb/leveldb"
"github.com/Mrs4s/go-cqhttp/global" "github.com/syndtr/goleveldb/leveldb/opt"
"github.com/Mrs4s/go-cqhttp/internal/base"
"github.com/Mrs4s/go-cqhttp/internal/btree"
) )
// Media Cache DBs // Media Cache DBs
@ -21,70 +16,36 @@ var (
// Cache wraps the btree.DB for concurrent safe // Cache wraps the btree.DB for concurrent safe
type Cache struct { type Cache struct {
lock sync.RWMutex ldb *leveldb.DB
db *btree.DB
} }
// Insert 添加媒体缓存 // Insert 添加媒体缓存
func (c *Cache) Insert(md5, data []byte) { func (c *Cache) Insert(md5, data []byte) {
c.lock.Lock() _ = c.ldb.Put(md5, data, nil)
defer c.lock.Unlock()
var hash [16]byte
copy(hash[:], md5)
c.db.Insert(&hash[0], data)
} }
// Get 获取缓存信息 // Get 获取缓存信息
func (c *Cache) Get(md5 []byte) []byte { func (c *Cache) Get(md5 []byte) []byte {
c.lock.RLock() got, _ := c.ldb.Get(md5, nil)
defer c.lock.RUnlock() return got
var hash [16]byte
copy(hash[:], md5)
return c.db.Get(&hash[0])
} }
// Delete 删除指定缓存 // Delete 删除指定缓存
func (c *Cache) Delete(md5 []byte) { func (c *Cache) Delete(md5 []byte) {
c.lock.Lock() _ = c.ldb.Delete(md5, nil)
defer c.lock.Unlock()
var hash [16]byte
copy(hash[:], md5)
_ = c.db.Delete(&hash[0])
} }
// Init 初始化 Cache // Init 初始化 Cache
func Init() { func Init() {
node, ok := base.Database["cache"] open := func(typ, path string, cache *Cache) {
var conf map[string]string ldb, err := leveldb.OpenFile(path, &opt.Options{
if ok { WriteBuffer: 4 * opt.KiB,
err := node.Decode(&conf) })
if err != nil { if err != nil {
log.Fatalf("failed to read cache config: %v", err) log.Fatalf("open cache %s db failed: %v", typ, err)
} }
cache.ldb = ldb
} }
open("image", "data/images", &Image)
open := func(typ string, cache *Cache) { open("video", "data/videos", &Video)
file := conf[typ]
if file == "" {
file = fmt.Sprintf("data/%s.db", typ)
}
if global.PathExists(file) {
db, err := btree.Open(file)
if err != nil {
log.Fatalf("open %s cache failed: %v", typ, err)
}
cache.db = db
} else {
db, err := btree.Create(file)
if err != nil {
log.Fatalf("create %s cache failed: %v", typ, err)
}
cache.db = db
}
}
open("image", &Image)
open("video", &Video)
} }

View File

@ -79,11 +79,6 @@ database: # 数据库相关设置
# 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能 # 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
enable: true enable: true
# 媒体文件缓存, 删除此项则使用缓存文件(旧版行为)
cache:
image: data/image.db
video: data/video.db
# 连接服务列表 # 连接服务列表
servers: servers:
# 添加方式,同一连接方式可添加多个,具体配置说明请查看文档 # 添加方式,同一连接方式可添加多个,具体配置说明请查看文档