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 分摊压力吧,具体参考后面文章

相关推荐
XiaoYu20022 天前
第3章 Nest.js拦截器
前端·ai编程·nestjs
XiaoYu20024 天前
第2章 Nest.js入门
前端·ai编程·nestjs
实习生小黄4 天前
NestJS 调试方案
后端·nestjs
当时只道寻常8 天前
NestJS 如何配置环境变量
nestjs
濮水大叔19 天前
VonaJS是如何做到文件级别精确HMR(热更新)的?
typescript·node.js·nestjs
ovensi19 天前
告别笨重的 ELK,拥抱轻量级 PLG:NestJS 日志监控实战指南
nestjs
ovensi20 天前
Docker+NestJS+ELK:从零搭建全链路日志监控系统
后端·nestjs
Gogo81622 天前
nestjs 的项目启动
nestjs
没头发的卓卓1 个月前
新手入门:nest基本使用规则(适合零基础小白)
nestjs