Files
EdgeCommon/pkg/serverconfigs/shared/data_map.go
GoEdgeLab 2f3981704e v1.4.1
2024-07-27 13:29:26 +08:00

44 lines
929 B
Go

// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cloud .
package shared
import (
"bytes"
"crypto/md5"
"fmt"
"sync"
)
var dataMapPrefix = []byte("GOEDGE_DATA_MAP:")
// DataMap 二进制数据共享Map
// 用来减少相同数据占用的空间和内存
type DataMap struct {
Map map[string][]byte
locker sync.Mutex
}
// NewDataMap 构建对象
func NewDataMap() *DataMap {
return &DataMap{Map: map[string][]byte{}}
}
// Put 放入数据
func (this *DataMap) Put(data []byte) (keyData []byte) {
this.locker.Lock()
defer this.locker.Unlock()
var key = string(dataMapPrefix) + fmt.Sprintf("%x", md5.Sum(data))
this.Map[key] = data
return []byte(key)
}
// Read 读取数据
func (this *DataMap) Read(key []byte) []byte {
this.locker.Lock()
defer this.locker.Unlock()
if bytes.HasPrefix(key, dataMapPrefix) {
return this.Map[string(key)]
}
return key
}