缓存

使用自定义缓存存储资源。


The DrupalClient 支持缓存资源。

这在处理全局数据时非常有用:您可以只获取一次数据并在构建过程中重复使用。

您可以使用 cache 选项提供自己的缓存实现。


示例

这是一个使用 Redis 缓存资源的示例。

注意:从 next-drupal 1.3.0 开始,只有 getResourcegetMenu 支持缓存。

lib/drupal.ts

import { DrupalClient, DataCache } from "next-drupal"
import Redis from "ioredis"
const redis = new Redis(process.env.REDIS_URL)
export const redisCache: DataCache = {
async set(key, value) {
return await redis.set(key, value)
},
async get(key) {
return await redis.get(key)
},
}
export const drupal = new DrupalClient(
process.env.NEXT_PUBLIC_DRUPAL_BASE_URL,
{
cache: redisCache,
}
)

现在,当你进行 getResourcegetMenu 调用时,你可以告诉客户端缓存并重复使用响应。

lib/get-menu.ts

import { PHASE_PRODUCTION_BUILD } from "next/constants"
import { DrupalMenuLinkContent } from "next-drupal"
import { drupal } from "lib/drupal"
export async function getMenu(name: string): Promise<DrupalMenuLinkContent[]> {
const menu = await drupal.getMenu(name, {
// Cache resource during build.
withCache: process.env.NEXT_PHASE === PHASE_PRODUCTION_BUILD,
cacheKey: `menu:${name}`,
})
return menu.items
}

lib/get-block.ts

import { PHASE_PRODUCTION_BUILD } from "next/constants"
import { DrupalBlock } from "next-drupal"
import { drupal } from "lib/drupal"
export async function getBlock(
type: string,
uuid: string
): Promise<DrupalBlock> {
return await drupal.getResource(type, uuid, {
withCache: process.env.NEXT_PHASE === PHASE_PRODUCTION_BUILD,
cacheKey: `block:${type}:${uuid}`,
})
}