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

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

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

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

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

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

    解决方案:

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

  • 相关阅读:
    opencv中彩色图转换成灰度图rgb2gray
    C和MATLAB中:同时对多个变量连续赋值
    error LNK2019: 无法解析的外部符号
    空间中两直线位置关系
    百度网盘不能绑定QQ
    matlab中双站异面直线法定位目标
    Sublime Text3编辑器简介
    Sybase IQ使用过程中注意事项
    Sybase数据库常用函数
    Sybase数据库第三方软件安装
  • 原文地址:https://www.cnblogs.com/julymaple/p/5767238.html
Copyright © 2011-2022 走看看