# 4.2 缓存模块
# 4.2.1 基础介绍
缓存模块是用于缓存数据的模块,缓存模块的主要功能是将数据缓存到内存中,以提高数据的访问速度。
# 4.2.2 何时使用
缓存模块适用于需要频繁访问数据,但是数据变化不频繁的场景。例如:数据库查询结果、API接口返回结果等。
# 4.2.3 如何使用
以下以redis缓存为例展示如何使用,其他缓存的使用方法类似。
- 安装依赖
$ go get github.com/dobyte/due/v2@v2.4.2
$ go get github.com/dobyte/due/cache/redis/v2@e5cd009
1
2
2
- 导入依赖
import (
"github.com/dobyte/due/v2/cache"
"github.com/dobyte/due/cache/redis/v2"
)
1
2
3
4
2
3
4
- 设置缓存器
// 在全局设置缓存器
cache.SetCache(redis.NewCache())
1
2
2
- 使用缓存
// 从缓存中获取数据,如若缓存中不存在,则构建新的缓存
unix, err := cache.GetSet(context.Background(), "key", func() (any, error) {
return xtime.Now().Unix(), nil
}).Int64()
if err != nil {
log.Errorf("get set cache failed: %v", err)
return
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 接口文档
https://pkg.go.dev/github.com/dobyte/due/v2/cache (opens new window)
- 全部实现
# 4.2.4 redis缓存示例
以下完整示例详见:cache-redis-example (opens new window)
- 创建项目
$ mkdir cache-redis-example
1
- 安装依赖
$ cd cache-redis-example
$ go mod init cache-redis-example
$ go get github.com/dobyte/due/v2@v2.4.2
$ go get github.com/dobyte/due/cache/redis/v2@e5cd009
1
2
3
4
2
3
4
- 启动配置
文件位置:cache-redis-example/etc/etc.toml (opens new window)
[cache.redis]
# 客户端连接地址
addrs = ["127.0.0.1:6379"]
# 数据库号
db = 0
# 用户名
username = ""
# 密码
password = ""
# 私钥文件
keyFile = ""
# 证书文件
certFile = ""
# CA证书文件
caFile = ""
# 最大重试次数
maxRetries = 3
# key前缀,默认为cache
prefix = "due:cache"
# 空值,默认为cache@nil
nilValue = "cache@nil"
# 空值过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
nilExpiration = "10s"
# 最小过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为1h
minExpiration = "1h"
# 最大过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为24h
maxExpiration = "24h"
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
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
- 编写示例
文件位置:cache-redis-example/main.go (opens new window)
package main
import (
"context"
"github.com/dobyte/due/cache/redis/v2"
"github.com/dobyte/due/v2/cache"
"github.com/dobyte/due/v2/log"
"github.com/dobyte/due/v2/utils/xtime"
)
func main() {
// 设置缓存器
cache.SetCache(redis.NewCache())
// 从缓存中获取数据,如若缓存中不存在,则构建新的缓存
unix, err := cache.GetSet(context.Background(), "unix", func() (any, error) {
return xtime.Now().Unix(), nil
}).Int64()
if err != nil {
log.Errorf("get set cache failed: %v", err)
return
}
log.Infof("unix: %d", unix)
}
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
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
- 运行示例
$ cd cache-redis-example
$ go run main.go
INFO[2025/10/25 15:05:44.024250] main.go:25 unix: 1761375944
1
2
3
2
3
# 4.2.5 memcache缓存示例
以下完整示例详见:cache-memcache-example (opens new window)
- 创建项目
$ mkdir cache-memcache-example
1
- 安装依赖
$ cd cache-memcache-example
$ go mod init cache-memcache-example
$ go get github.com/dobyte/due/v2@v2.4.2
$ go get github.com/dobyte/due/cache/memcache/v2@e5cd009
1
2
3
4
2
3
4
- 启动配置
文件位置:cache-memcache-example/etc/etc.toml (opens new window)
[cache.memcache]
# 客户端连接地址
addrs = ["127.0.0.1:11211"]
# key前缀,默认为cache
prefix = "due:cache"
# 空值,默认为cache@nil
nilValue = "cache@nil"
# 空值过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为10s
nilExpiration = "10s"
# 最小过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为1h
minExpiration = "1h"
# 最大过期时间,支持单位:纳秒(ns)、微秒(us | µs)、毫秒(ms)、秒(s)、分(m)、小时(h)、天(d)。默认为24h
maxExpiration = "24h"
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 编写示例
文件位置:cache-memcache-example/main.go (opens new window)
package main
import (
"context"
"github.com/dobyte/due/cache/memcache/v2"
"github.com/dobyte/due/v2/cache"
"github.com/dobyte/due/v2/log"
"github.com/dobyte/due/v2/utils/xtime"
)
func main() {
// 设置缓存器
cache.SetCache(memcache.NewCache())
// 从缓存中获取数据,如若缓存中不存在,则构建新的缓存
unix, err := cache.GetSet(context.Background(), "key", func() (any, error) {
return xtime.Now().Unix(), nil
}).Int64()
if err != nil {
log.Errorf("get set cache failed: %v", err)
return
}
log.Infof("unix: %d", unix)
}
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
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
- 运行示例
$ cd cache-memcache-example
$ go run main.go
INFO[2025/10/25 15:05:44.024250] main.go:25 unix: 1761375944
1
2
3
2
3