NestJS Cache Manager调用get方法始终返回undefined问题咨询
CacheManager.get() 返回 undefined 的排查与解决
以下是几个常见的排查方向和解决方法:
检查CacheModule的注册配置
Nest的CacheModule必须通过.forRoot()完成初始化才能正常工作,仅在imports中添加CacheModule不会启用缓存。根模块的正确注册方式如下:// app.module.ts import { CacheModule, Module } from '@nestjs/common'; @Module({ imports: [CacheModule.forRoot()], controllers: [YourController], providers: [YourService], }) export class AppModule {}若需在多个子模块中使用缓存,可在根模块设置全局模块:
CacheModule.forRoot({ isGlobal: true })或者在子模块中通过
CacheModule.register()单独初始化。确认缓存键的一致性
内存缓存默认对键名大小写敏感,确保get和set使用的键完全一致(比如'key'和'Key'会被视为不同键)。你的代码中键名固定为'key',这一步可快速排查是否有拼写错误。检查缓存过期设置
若调用set时未指定TTL(过期时间),默认缓存不会过期,但如果CacheModule全局配置了默认TTL,可能导致缓存提前失效。可显式设置TTL测试:await this.cacheManager.set('key', 'cached value', { ttl: 3600 }); // 设置1小时过期验证依赖注入的正确性
确保导入了正确的类型和令牌:import { Inject, Cache } from '@nestjs/common'; import { CACHE_MANAGER } from '@nestjs/cache-manager';部分Nest版本中
Cache类型需从@nestjs/cache-manager导入,需根据你的版本调整。测试缓存写入是否成功
在set后立即调用get验证缓存是否被正确写入:await this.cacheManager.set('key', 'cached value'); const testVal = await this.cacheManager.get('key'); console.log('缓存写入测试:', testVal); // 应输出'cached value'若此处能获取到值,但后续请求无法获取,可能是开发模式热重载导致缓存清空(代码修改后服务器重启,内存缓存会丢失),这种情况属于正常现象。
内容的提问来源于stack exchange,提问作者Fahad Zaheer
相关产品推荐
相关产品推荐

