使用 node 如何缓存服务端接口数据
发布于 5 年前 作者 dixiaoping 5242 次浏览 来自 问答

项目中使用node 做前后端分离,后端使用php 写的,服务端的只负责提供接口,前端我打算使用node作为中转,但是目前有个问题,

网页类更新不是很频繁,用户量很大,我想如何把服务端请求的接口数据,缓存下来,设个时间限制,过期了再去请求服务端接口,

避免重复请求的问题,服务端数据,也可以让网站响应更快呢,

8 回复

难道不是 redis 就能解决问题么?

@cWatermelon 谢谢,可以考虑,以前一直没有用过redis,所以有点迷惑

没必要用node 做中转。

我们之前是 Laravel ,现在是 nest.js 框架。 PHP 在架构中存在的意义不大。

后端有java 还好 说

只有一个Node实例的话,可以直接把接口放到一个闭包的变量里,每次请求过来先去变量里读一下,读到就返回给前端,没读到就去查数据库计算一个结果存到变量里再返回给前端。 多个实例可以用Redis数据库,多个Node实例链接一个Redis数据库,把Redis数据库当成那个存储数据的变量用。因为Redis是内存型数据库,所以读数据速度快到令人发指。

不用说 ,一定是redis!

@libook 但是服务端已经使用redis了,服务端已经把数据缓存到redis了,web端是否还需要缓存,我核心用法就是模板加数据,ejs+node+express+request ,请求服务端接口数据,应用模板渲染展示,目的就是前后端分离,为了让首屏渲染更快,考虑把数据缓存起来

多个实例 也还是放在一个闭包函数的变量里。。。每次返回函数,定期刷新就是了

@dixiaoping 如果希望浏览器端也做缓存的话,很简单,加个头就可以 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching_FAQ 很多人说,计算机领域有两大难题,一是命名,二是缓存管理。 缓存加在服务端上的自己还能控制,加在浏览器端的就很难控制了,所以加缓存前要三思。

你在用ejs,应该不算完全前后端分离吧,广义的前后端分离的思想的核心是页面在上线的时候渲染一次,用户请求都是直接拿渲染后的页面返回给用户。完全前后端分离可以用Vue、React、Angular之类的前端框架做网页,然后把编译后的静态文件扔在Nginx或CDN上,这样就完全去掉实时渲染的过程了。 如果只是为了首屏渲染快的话有很多其他方案,缓存应该是万不得已的Plan Z。

回到顶部