55 lines
920 B
Plaintext
55 lines
920 B
Plaintext
|
= 缓存设计
|
||
|
:author: tiglog
|
||
|
:experimental:
|
||
|
:toc: left
|
||
|
:toclevels: 3
|
||
|
:toc-title: 目录
|
||
|
:sectnums:
|
||
|
:icons: font
|
||
|
:!webfonts:
|
||
|
:autofit-option:
|
||
|
:source-highlighter: rouge
|
||
|
:rouge-style: github
|
||
|
:source-linenums-option:
|
||
|
:revdate: 2022-11-30
|
||
|
:imagesdir: ./img
|
||
|
|
||
|
|
||
|
**注:** 暂时直接使用 `go-resdis/cache`
|
||
|
|
||
|
|
||
|
从使用倒推设计。
|
||
|
|
||
|
== 场景1
|
||
|
|
||
|
自己管理 `key`:
|
||
|
|
||
|
[source,golang]
|
||
|
----
|
||
|
ck := "key_foo"
|
||
|
data := cache.get(ck)
|
||
|
if !data { // <1>
|
||
|
data = FETCH_DATA()
|
||
|
cache.set(ck, data, 7200) // <2>
|
||
|
}
|
||
|
return data
|
||
|
----
|
||
|
|
||
|
<1> `get` 值为 `false` 表示没有缓存或缓存已过期
|
||
|
<2> 7200 为缓存有效期(单位为秒),若指定为 0 表示不过期。
|
||
|
|
||
|
== 场景2
|
||
|
|
||
|
程序自动管理 `key`:
|
||
|
|
||
|
[source,golang]
|
||
|
----
|
||
|
cache.get(func() {
|
||
|
return 'foo'
|
||
|
}, 7200)
|
||
|
----
|
||
|
|
||
|
这种方式一般情况下比较方便,要是需要手动使缓存失效,则要麻烦一些。因此,这种方
|
||
|
式暂时不实现。
|
||
|
|