Caching
Using a custom cache for resources.
The DrupalClient has support for caching resources.
This is handy when dealing with global data: you can fetch data once and re-use during builds.
You can provide your own cache implementation using the cache option.
Example
Here's an example on how you can use Redis to cache resources.
Note: as of next-drupal 1.3.0, only getResource and getMenu support caching.
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,  })Now when you make a getResource or getMenu call you can tell the client to cache and re-use responses.
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}`,  })}