概述

GCache 是带有自动载入、过期机制的缓存库。所谓自动载入是指,GCache 可以自定义载入 Handler,当缓存中不存在 key 时调用 Handler 载入 key

示例

1. 安装

1
go get github.com/bluele/gcache

2. 基础使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 将输出:
// Get: ok
package main

import (
"github.com/bluele/gcache"
"fmt"
)

func main() {
gc := gcache.New(20).
LRU().
Build()
gc.Set("key", "ok")
value, err := gc.Get("key")
if err != nil {
panic(err)
}
fmt.Println("Get:", value)
}

3. 过期 key 使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Get: ok
// 10 seconds later, new attempt:
// panic: ErrKeyNotFound
package main

import (
"github.com/bluele/gcache"
"fmt"
"time"
)

func main() {
gc := gcache.New(20).
LRU().
Build()
gc.SetWithExpire("key", "ok", time.Second*10)
value, _ := gc.Get("key")
fmt.Println("Get:", value)

// Wait for value to expire
time.Sleep(time.Second*10)

value, err = gc.Get("key")
if err != nil {
panic(err)
}
fmt.Println("Get:", value)
}

4. 自动载入示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Get: ok
package main

import (
"github.com/bluele/gcache"
"fmt"
)

func main() {
gc := gcache.New(20).
LRU().
LoaderFunc(func(key interface{}) (interface{}, error) {
return "ok", nil
}).
Build()
value, err := gc.Get("key")
if err != nil {
panic(err)
}
fmt.Println("Get:", value)
}

参考