nestjs-typeorm缓存cache

前言

开发中,一些访问高的功能,可能会遇到瓶颈,正常来说升级服务器即可,如果不这样,那么我们则可以通过缓存优化的方式,来减少我们的数据库服务器压力

缓存 cache

缓存 cache 是一个性能优化手段,对于内容不经常改变,查询相同时,则会以缓存代替对数据库的查询,以提升效率,默认缓存为 1000ms,即 1s,例如:我们可以用此功能来完成排行榜功能,将会提高效率(不用每次都重新排序计算)

这个缓存默认是数据库类型,访问的是数据库,会额外创建一个缓存表,里边保存查询条件、时间、内容等数据,访问前会先根据查询条件到对应的缓存表中查找,找到没过期直接返回,否则使用新的查询,redis则是使用redis存储表结构没什么变化

js 复制代码
下面查询语句只需要加上 cache 即可使用缓存功能
let user = await this.userRepository.findOne({
    ...
    cache: true, //可以传递数字,单位ms
});

ps: QueryBuilder 中也类似,就不多介绍了

配置 cache 缓存类型(数据库)

使用前还需要,将数据库初始化操作中的 cache 打开,如果之前没有打开 cache 记得同步一下即可,毕竟默认缓存使用的是数据库表结构形式的缓存,可以设置过期时间

js 复制代码
TypeOrmModule.forRoot({
      type: 'mysql',
      synchronize: true, //自动同步创建数据库表
      autoLoadEntities: true, //自动查找entity实体
      ...
      cache: true, //允许使用cache,默认 database 类型
}),

其默认使用一个名为query-result-cache的单独表,并在那里存储所有查询结果,tableName 属性可以改表名

js 复制代码
cache: {  
    type: "database",  
    duration: 30000, //默认是1s,这里案例设置30s
    tableName: "configurable-table-query-result-cache"  
}

如果不想额外配置,这个相对来说已经很好用了,如果还想追求速度,可以使用下面介绍的 redis

配置 cache 缓存类型为 redis

不多说,得额外配置redis,跟人配置好了,另一个redis都连接成功操作了,这个告诉我连接本地 redis 失败,看着非常不好用

因此写好的案例,我直接就删了,还不如后面直接手动使用 redis 哈,这里先忽略它吧,知道有他就行,使用也简单,后面文章介绍 redis 的配置和使用

最后

一般来说直接使用数据库缓存就行了,如果数据库遇到瓶颈,只能用redis,那么就上 redis 分摊压力吧,具体参考后面文章

相关推荐
yuanlaile16 天前
做了 3 年后端才明白:学 NestJS 千万不要只学 API 语法,完整电商项目才是分水岭
typescript·nestjs·node.js 后端·nestjs实战
濮水大叔17 天前
NestJS Dynamic Providers 与 Cabloy/Vona Provider Scene:同接口多实现的两种装配哲学
typescript·node.js·nestjs
濮水大叔18 天前
Cabloy/Vona 如何避开 NestJS 的循环依赖问题:懒属性注入机制源码解析
typescript·node.js·nestjs
花旗蜕变1 个月前
前端转 NestJS 全栈实践:从表单页面到微信业务系统
前端·typescript·nestjs
柒和远方1 个月前
NestJS + TypeORM 学习笔记:语法和类型不绕了
postgresql·orm·nestjs
小二李1 个月前
第15章 NestJS 项目部署
nestjs
前端踩bug工程师1 个月前
nestjs 实现一对多,多对一,一对一在实现上的区别
nestjs
爱丶不疚2 个月前
Electron:Module 与 Service 的职责边界与加载时序编排
前端·electron·nestjs
沐沐师2 个月前
Nest.js 微服务入门教程
微服务·nestjs
沐沐师2 个月前
Redis 入门教程
redis·nestjs