缓存
使用自定义缓存存储资源。
The DrupalClient
支持缓存资源。
这在处理全局数据时非常有用:您可以只获取一次数据并在构建过程中重复使用。
您可以使用 cache
选项提供自己的缓存实现。
示例
这是一个使用 Redis 缓存资源的示例。
注意:从 next-drupal 1.3.0
开始,只有 getResource
和 getMenu
支持缓存。
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, })
现在,当你进行 getResource
或 getMenu
调用时,你可以告诉客户端缓存并重复使用响应。
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}`, })}