Nest.js 如何配置缓存?

推荐答案

在 Nest.js 中配置缓存可以通过 CacheModule 来实现。以下是一个简单的配置示例:

-- -------------------- ---- -------
------ - ------------ ------ - ---- -----------------
------ - ------------- - ---- -------------------
------ - ---------- - ---- ----------------

---------
  -------- -
    ----------------------
      ---- -- -- -------
      ---- --- -- ------
    ---
  --
  ------------ ----------------
  ---------- -------------
--
------ ----- --------- --

在这个示例中,CacheModule.register() 方法用于配置缓存模块。ttl 参数表示缓存的有效时间(以秒为单位),max 参数表示缓存的最大数量。

本题详细解读

1. 缓存模块的作用

Nest.js 的 CacheModule 提供了一种简单的方式来管理应用程序中的缓存。通过缓存,可以减少对数据库或其他外部资源的频繁访问,从而提高应用程序的性能。

2. 缓存模块的配置

CacheModule.register() 方法接受一个配置对象,常用的配置项包括:

  • ttl: 缓存的有效时间(以秒为单位),默认值为 5 秒。
  • max: 缓存的最大数量,默认值为 10
  • store: 指定缓存存储的引擎,默认使用内存存储。

3. 使用缓存

在控制器或服务中,可以通过 @UseInterceptors(CacheInterceptor) 装饰器来启用缓存。例如:

-- -------------------- ---- -------
------ - ----------------- ----------- ---- --------------- - ---- -----------------
------ - ---------- - ---- ----------------

-------------
----------------------------------
------ ----- ------------- -
  ------------------- -------- ----------- ----------- --

  ------
  --------- -
    ------ --------------------------
  -
-

在这个示例中,CacheInterceptor 会自动缓存 getData() 方法的返回值,并在后续请求中直接返回缓存的结果,而不需要再次执行 getData() 方法。

4. 自定义缓存键

默认情况下,缓存键是基于请求的 URL 生成的。如果需要自定义缓存键,可以通过 @CacheKey()@CacheTTL() 装饰器来实现。例如:

-- -------------------- ---- -------
------ - --------- --------- ----------- ---- --------------- - ---- -----------------
------ - ---------- - ---- ----------------

-------------
----------------------------------
------ ----- ------------- -
  ------------------- -------- ----------- ----------- --

  ------
  -----------------------
  -------------
  --------- -
    ------ --------------------------
  -
-

在这个示例中,@CacheKey('custom-key') 指定了缓存键为 custom-key@CacheTTL(10) 指定了缓存的有效时间为 10 秒。

5. 清除缓存

如果需要手动清除缓存,可以通过 CacheManager 来实现。例如:

-- -------------------- ---- -------
------ - -------------- ------- ----------- --- - ---- -----------------
------ - ----- - ---- ----------------

-------------
------ ----- ------------- -
  ---------------------------------- ------- ------------- ------ --

  -------------------
  ----- ------------ -
    ----- --------------------------
    ------ ------ ---------
  -
-

在这个示例中,CacheManager 提供了 reset() 方法用于清除所有缓存。

纠错
反馈