zoukankan      html  css  js  c++  java
  • 记录一次问题

    我的后台服务有两个部分:
    1. 接口数据,数据从项目启动时首先查库,数据进缓存,然后去订阅另个组广播的mq消息来不断刷新缓存。同时有定时去查库,防止mq挂掉,保证数据无误。
    2.推送数据,这是另个项目,但是做的事情很简单,转发上面说的从另个组订阅的消息,我们自己包装处理,再发送出去。

    前端调用:
    客户端会首先调用接口数据完成模型初始化,然后建立websocket来接受我的推送消息.

    问题:
    在客户端某个时刻接受到推送消息,更新了界面的数据之后,去手动刷新界面,重新请求接口数据的时候,却发现得到的数据是旧的。按照我上面的逻辑 ,不应该是会有旧数据的。

    问题查找:
    经过调查,友方组在发出消息给我方之前,会去更新数据库的数据,也就是说,他们数据库的数据也一定是新的。

    问题查找继续:
    但是后来我发现,虽然他们的 更新库->发消息 虽然有逻辑的先后,但是并不能保证消息发出之后,数据库的数据马上会更新好。这样会导致,当我方接受到mq消息更新了缓存之后,刚好碰上我的定时查库覆盖缓存,这时候查库得到的数据极有可能比缓存中的数据还旧,于是导致上述问题。

    解决方案:

    在不能让友方组改动逻辑的情况下,我只能做出一些容错性的让步。我在查库之后,更新缓存之前,对数据库的数据和缓存中的数据做一个比较,如果数据库的数据更新,则刷新缓存,反之则不刷新缓存并结束所有操作。

  • 相关阅读:
    OpenCV在MFC图像控件内显示图像
    Android APK反编译具体解释(附图)
    Android下用Properties保存程序配置
    王灏:光音网络致力打造Wi-Fi大生态圈
    解决ccSvcHst.exe CPU占用超50%的问题,及其缘由
    配置管理工具比較
    应用程序无法正常启动0xc0150002 解决方式
    现有一些开源ESB总线的比較
    使用GridView自带分页的代码
    Hadoop 2.4.0新特性介绍
  • 原文地址:https://www.cnblogs.com/julymaple/p/5767238.html
Copyright © 2011-2022 走看看