62 lines
977 B
Plaintext
62 lines
977 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
|
|
|
|
|
|
== 实现
|
|
|
|
已于 2023-06-21 实现。
|
|
|
|
可以基于 `redis` 进行一些基本使用。
|
|
|
|
|
|
|
|
== 设计
|
|
|
|
从使用倒推设计。
|
|
|
|
=== 场景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)
|
|
----
|
|
|
|
这种方式一般情况下比较方便,要是需要手动使缓存失效,则要麻烦一些。因此,这种方
|
|
式暂时不实现。
|
|
|