Swa*_*ali 1 node.js node-redis typescript typeorm nestjs
我正在使用 Redis 在 TypeOrm 中缓存查询。
但问题是,TypeOrm 和 Redis 包正在打开单独的连接,我只想为两者重用相同的连接。
这是 typeorm 配置:
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { Constants } from '../utils/Constants';
export const typeOrmConfig: TypeOrmModuleOptions = {
type: Constants.DB_TYPE,
host: Constants.DB_HOST,
port: Constants.DB_PORT,
username: Constants.DB_USER_NAME,
password: Constants.DB_PASSWORD,
database: Constants.DB_NAME,
entities: [ __dirname + '/../**/*.entity.{js,ts}' ],
synchronize: true,
logging: true,
cache: {
type: 'ioredis',
duration: 60000,
options: {
host: 'localhost',
password: 'swapnil',
port: 6379
}
},
extra: {
max: 10,
connectionTimeoutMillis: 2000
}
};
Run Code Online (Sandbox Code Playgroud)
我正在为 redis使用@svtslv/nestjs-ioredis包:
import { Constants } from '../utils/Constants';
export const config = {
host: Constants.REDIS_HOST,
port: parseInt(Constants.REDIS_PORT),
db: parseInt(Constants.REDIS_DB),
password: Constants.REDIS_PASSWORD
};
Run Code Online (Sandbox Code Playgroud)
使用这个包,我可以使用以下方法访问我的服务类中的redis:
public constructor(@InjectRedis() private readonly redis: Redis,) {}
Run Code Online (Sandbox Code Playgroud)
在深入研究 TypeORM 代码库后,我发现了两种解决方案(其中一个有点 hacky,我的案例也有问题)
根据文档,您可以实现自己的缓存处理程序,请参阅:https ://github.com/typeorm/typeorm/blob/master/docs/caching.md 。
这是更好但更难的解决方案,因为需要实现接口https://github.com/typeorm/typeorm/blob/master/src/cache/QueryResultCache.ts
此外,您需要使用forRootAsync注册 TypeOrmModule才能首先连接到 Redis。
根据代码库,您应该能够访问 TypeORM 正在创建的 Redise 客户端(连接)。
在 ORM 类型上,connection有一个名为connection.queryResultCache管理缓存的成员。client但queryResultCache( connection.queryResultCache.client)上还有一个成员名称
请参阅 TypeORM redis 缓存植入: https://github.com/typeorm/typeorm/blob/master/src/cache/RedisQueryResultCache.ts
import { Connection } from 'typeorm';
@Module({
imports: [TypeOrmModule.forRoot()],
})
export class AppModule {
constructor(private connection: Connection) {
connection.queryResultCache.client // <-- Cache client.
}
}
Run Code Online (Sandbox Code Playgroud)
但不用说,这不是预期的用途,这会将您的数据库耦合到 Redis,这对于让您的代码库面向未来来说并不是那么重要。
根据关注点分离的想法,我建议坚持使用两个连接而不是一个连接,以保持DB query Cache和标准Cache分离。
这将使您在未来进行集成测试和重构时更加灵活。
请参阅: https: //github.com/nestjs/typeorm/issues/59
| 归档时间: |
|
| 查看次数: |
10183 次 |
| 最近记录: |