BigCache使用入门

一、介绍

bigcache是一个内存缓存系统,用于存储键值对数据。没有gc操作。使用的时候需要序列化(反)。
bigcache的源代码在 https://github.com/allegro/bigcache

二、安装

我们安装最新的v3版本

go get -u github.com/allegro/bigcache/v3

安装完成后,我们就可以在go语言中使用bigcache了。下面是一些简单的示例。

三、使用示例

func TestSetGet(t *testing.T) {
    // new一个bigCache对象
    cache, _ := bigcache.New(context.Background(), bigcache.DefaultConfig(10*time.Minute))

    // get获取一个无值的key
    vNil, err := cache.Get("key")
    t.Log(vNil, err) // [] Entry not found 值为空的[]字节slice

    // set 存储数据
    cache.Set("key", []byte("value"))
    // get 获取数据
    v, _ := cache.Get("key")
    t.Log(v)         // 输出 [118 97 108 117 101]
    t.Log(string(v)) // 输出 value
}

我们看一下 Set和Get方法的源代码

// Set saves entry under the key
func (c *BigCache) Set(key string, entry []byte) error {
    hashedKey := c.hash.Sum64(key)
    shard := c.getShard(hashedKey)
    return shard.set(key, hashedKey, entry)
}

// Get reads entry for the key.
// It returns an ErrEntryNotFound when
// no entry exists for the given key.
func (c *BigCache) Get(key string) ([]byte, error) {
    hashedKey := c.hash.Sum64(key)
    shard := c.getShard(hashedKey)
    return shard.get(key, hashedKey)
}

在Set()方法,存储值为 []byte 字节slice类型,所以我们保存的时候,需要序列化数据成[]byte
而在Get()方法,获取的值为[]byte,我们此时需要反序列化[]byte成原来的类型。

3、1 string类型的 存储与获取以及修改

func TestSetGet(t *testing.T) {
    // new一个bigCache对象
    cache, _ := bigcache.New(context.Background(), bigcache.DefaultConfig(10*time.Minute))

    // get获取一个无值的key
    vNil, err := cache.Get("key")
    t.Log(vNil, err) // [] Entry not found 值为空的[]字节slice

    // set 存储数据
    cache.Set("key", []byte("value"))
    // get 获取数据
    v, _ := cache.Get("key")
    t.Log(v)         // 输出 [118 97 108 117 101]
    t.Log(string(v)) // 输出 value
}

你可能感兴趣的:(go)