缓存失效和同步角度/后端

时间:2015-11-06 22:40:16

标签: javascript java angularjs caching

说明:

我在后端有一个复杂而持久的查询,反馈前端的角度应用程序。

目前,角度应用程序使用后端的缓存数据,而不是直接从复杂查询中读取,这需要几分钟时间。缓存每天早上和晚上变暖。

当用户对UI进行更改并保存数据时,然后将数据传递到服务器端,并保存到数据库中。那时UI是最新的,直到用户刷新页面。同时数据库是最新的,但缓存是陈旧的。

因此,当用户刷新页面时,页面上会显示过时的缓存值。

更多信息:

我现在正在考虑刷新缓存的方法,并且欢迎更有经验的人提出任何建议。

我的想法是通过缓存作业(一次一个)刷新缓存,一旦用户保存,就会排队。这项工作将有相关的信息改变了,整个缓存不必重新计算,而只是改变了一点。

问题部分:

即使用户刷新页面,我还可以使用哪种技术让用户及时了解数据?当数据发送到服务器时,我应该以indexedDB或localstorage的形式在客户端保存'增量。因此,当页面刷新时,用户从本地存储或索引数据库中读取数据。

我仍然在考虑这个问题,显然我对此没有多少经验,对我到目前为止所采取的方向有何评论?

基本上我可以改变任何事情,包括后端/前端/缓存,它还处于POC阶段,我只是尽可能地了解对其他人有用的信息。< / p>

更新

更多背景。我正在处理像页面这样的索引,因此可以在线编辑多个记录。

此外,我还在后端对平面db记录进行了一些转换,然后将它们像结构一样转储到地图中,然后以json的形式传递给前端。

3 个答案:

答案 0 :(得分:3)

我认为最简单的方法是确保知道缓存的创建时间。进行更改时,请在localStorage中保存页面的当前状态以及缓存时间。当您加载页面时,您将获得缓存的数据,检查是否有时间查看它是否比您的localStorage版本更新。如果是,请使用缓存,如果没有,则从localStorage重新加载数据,因为它已经有缓存的数据加上您的更改。

答案 1 :(得分:2)

你的问题太长了,让我总结一下事实。

  1. 您在数据库中有很多信息
  2. 直接搜索查询需要几分钟
  3. 要提供快速搜索,请使用每天更新两次的缓存
  4. 当用户更改数据时,数据库会更新而缓存不会更新,因此网页会显示来自缓存的过期信息。
  5. 这看起来像使用场景的典型缓存,解决方案很明显:一旦数据库发生更改,您应该使用增量更新缓存。真正的实现将取决于您的应用程序架构和缓存结构。

    您问题的典型工作流程是:

    def updateRequest(Request req) {
        def tx = db.startTransaction();
        tx.execute(createUpdate(req.getData()));
        tx.commit(); // if transaction fails, cache is not updated
        cache.update(req.getData()); // can be done in background, if you return delta 
    }
    

答案 2 :(得分:0)

您似乎将数据存储在表中,并使用具有复杂查询的表来构建JSON配置以呈现index.html文件。我通过避免使用表和使用NoSQL解决方案避免了这个问题。我在客户端构建JSON配置对象,并将该JSON配置对象存储在NoSQL集合中。我使用URL进行简单查询以获取JSON配置对象并呈现index.html文件。

我有一点使用AWS DynamoDB存储JSON配置对象的经验,如果我需要更快,我可能会切换到AWS ElastiCache。

关键是您需要使用有用的密钥(如站点主机名或其他基本URL)缓存JSON配置对象,并将其用作index.html呈现的真实来源。

相关问题