课程章节介绍
各位同学,咱们今天来聊一个能让缓存代码变得又简单又安全的好东西,叫 Cache Builder。平时你要是写过缓存,肯定知道那种手动 `put` 的麻烦劲儿,而且一不小心就会漏掉缓存未命中的处理,搞得代码又乱又容易出错。那 Cache Builder 就是专门来解决这个痛点的。
它的思路特别巧妙:你只需要告诉平台“怎么构建这个缓存值就行”,剩下的自动处理全都交给系统。怎么做到的呢?很简单,就两步。
第一步,你定义一个类,这个类要实现 `Cache.CacheBuilder` 接口。接口里只有一个最核心的方法—— `doLoad`,注意没有 `doBoot` 哈,官方叫 `doLoad`。这个方法接收一个 `String` 类型的参数,通常我们把它当成缓存项的“钥匙”,也就是 key。在这个方法里,你就可以写构建缓存值的逻辑,比如去查数据库、调用外部服务什么的,最后把结果返回去。要是返回 `null`,系统就会明白“噢,这次不缓存,下次再问还得重新调 `doLoad`”。另外提醒一下,这个类必须是非静态的,也就是说 `doLoad` 是个实例方法,不是静态方法,因为系统会自动帮你创建这个类的实例来调用它。
第二步,读取缓存的时候,你不再需要自己 `put` 了,只要调一个 `Cache.Session.get` 或者 `Cache.Org.get`,把刚才那个类的 `Class` 对象和你的 key 传进去就行。比如 `Cache.Session.get(MyCacheBuilder.class, 'myKey')`。
整个过程特别顺:第一次调用 `get` 的时候,平台发现缓存里没有这个 key,就会自动帮你创建 `MyCacheBuilder` 的实例,执行你的 `doLoad('myKey')` 方法,拿到结果以后缓存起来,然后返回给你。之后再用同一个 key 去取,就直接从缓存拿,根本不会再走 `doLoad` 了。如果缓存因为超时或者被清理了,也就是“未命中”,那么下一次 `get` 又会自动触发 `doLoad`,重新构建再缓存。你看,是不是全程不需要你手动去 `put`,也不用担心忘记处理未命中,代码干净多了。
咱们举个特别简短的例子,比如说要缓存一个客户的信息。你可以这么写:
```apex
public class AccountCacheBuilder implements Cache.CacheBuilder {
public Object doLoad(String acctId) {
// 根据传入的 acctId 查数据库
Account acc = [SELECT Name, Industry FROM Account WHERE Id = :ac
关键词
Apex
Salesforce
Developer Guide