Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > go内存缓存BigCache Entry

go内存缓存BigCache之Entry封装源码阅读

作者:海生

这篇文章主要介绍了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的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文