type KV struct {
count int
keys []string
hash map[string]interface{}
lock sync.RWMutex
}
// 新建KV缓存(preCapacity为预申请内存容量)
func NewKV(preCapacity uint) *KV {
return &KV{
keys: make([]string, 0, int(preCapacity)),
hash: make(map[string]interface{}, int(preCapacity)),
}
}
// 添加kv键值对
func (this *KV) Set(k string, v interface{}) {
this.lock.Lock()
if _, ok := this.hash[k]; !ok {
this.keys = append(this.keys, k)
sort.Strings(this.keys)
this.count++
}
this.hash[k] = v
this.lock.Unlock()
}
// 获取数据长度
func (this *KV) Count() int {
this.lock.RLock()
defer this.lock.RUnlock()
return this.count
}
// 由key检索value
func (this *KV) Get(k string) (interface{}, bool) {
this.lock.RLock()
defer this.lock.RUnlock()
v, ok := this.hash[k]
return v, ok
}
// 根据key排序,返回有序的vaule切片
func (this *KV) Values() []interface{} {
this.lock.RLock()
defer this.lock.RUnlock()
vals := make([]interface{}, this.count)
for i := 0; i < this.count; i++ {
vals[i] = this.hash[this.keys[i]]
}
return vals
}
(adsbygoogle = window.adsbygoogle || []).push({});
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有