推荐答案
在 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()
方法用于清除所有缓存。