go内存缓存BigCache之Entry封装源码阅读
更新时间:2023年09月05日 14:05:39 作者:海生
这篇文章主要介绍了go内存缓存BigCache之Entry封装源码阅读
介绍
在bigcache存储中,数据值存储的形式为[]byte。
我们通过一个,存储的时候,同时会把 hash值,key值,时间戳,entry同时存起来。
我们可以简称为 header + entry
header的存储大小为 18字节 [18]byte
通过wrapEntry()函数封装
const ( timestampSizeInBytes = 8 // Number of bytes used for timestamp hashSizeInBytes = 8 // Number of bytes used for hash keySizeInBytes = 2 // Number of bytes used for size of entry key headersSizeInBytes = timestampSizeInBytes + hashSizeInBytes + keySizeInBytes // Number of bytes used for all headers ) func wrapEntry(timestamp uint64, hash uint64, key string, entry []byte, buffer *[]byte) []byte { keyLength := len(key) blobLength := len(entry) + headersSizeInBytes + keyLength if blobLength > len(*buffer) { *buffer = make([]byte, blobLength) } blob := *buffer binary.LittleEndian.PutUint64(blob, timestamp) binary.LittleEndian.PutUint64(blob[timestampSizeInBytes:], hash) binary.LittleEndian.PutUint16(blob[timestampSizeInBytes+hashSizeInBytes:], uint16(keyLength)) copy(blob[headersSizeInBytes:], key) copy(blob[headersSizeInBytes+keyLength:], entry) return blob[:blobLength] }
以上就是go内存缓存BigCache之Entry封装源码阅读的详细内容,更多关于go内存缓存BigCache Entry的资料请关注脚本之家其它相关文章!
最新评论