node做服务端缓存,万一被缓存的结果变了,用户怎么获取到最新的内容呢?
发布于 6 年前 作者 vcxiaohan 3795 次浏览 来自 问答

求更详细的解释 我知道客户端缓存,通常可以通过ETAG和Last-Modified来标识该内容是否发生了变化,那么服务端缓存呢 2018-06-09_123012.png

6 回复
  1. 如果用redis做缓存可以设置失效时间

这样内容改变了也只是这个时间内取到的不是最新的。过期了之后下次客户端再去就会到数据库了。

  1. 也可以应用层做缓存

写数据的时候同时更新缓存,如果是分布式的话通知其他服务端更新缓存

来自酷炫的 CNodeMD

先了解下 内存的存储速度 和 硬盘的读写速度,与 web 的性能瓶颈。

有机制保证缓存能更新就行了,即便有延迟 这个跟业务容忍度也有关系

3楼正解,改变的时候去更新缓存就好了。

总结楼上2点 1、缓存方案的必要性 2楼所讲的 2、缓存过期方案

  1. redis过期键
  2. 你觉得缓存内容有变化时主动删除/更新缓存(这里删除的做法是基于你在缓存不存在时会自动去获取最新结果)

楼主误解缓存了,后端服务比较复杂,可能牵涉到各种IO操作(磁盘甚至网络),如果每个客户端每次请求都需要跑一边那服务器稍微来点量要么crash要么hang住了。也不用很多,比如,1秒内100次请求。。。最直观的方法就是加上缓存,第一次请求来时只需走一遍各种IO,最后把数据缓存到内存,后面的所有请求就都可以从内存拿数据了,响应至少可以快一个以上的数量级。就算你的缓存10秒钟失效,那也可以带来很高的性能了。CPU的L1/L2缓存和CDN的静态数据缓存,与此同理。 至于为什么浏览器的缓存会使用更新时间和文件哈希来标志,那是为了尽可能久地延长缓存文件的有效期,直到文件发生改变。这也是浏览器为什么不像后端那样设置一个固定的超时时间,还有就是浏览器缓存的文件也就自己用,而后端缓存的数据则是响应千千万万的客户端请求的。

来自✨ Node.js开源项目精选

回到顶部