• 记录一次问题


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

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

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

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

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

    解决方案:

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

  • 相关阅读:
    英雄无敌5东方部落秘籍
    Tomcat基础学习
    Flume入门
    SparkStreaming 编程指南
    Kafka单机配置部署
    Kafka介绍 (官方文档翻译)
    spark调优
    《Spark Python API 官方文档中文版》 之 pyspark.sql (四)
    《Spark Python API 官方文档中文版》 之 pyspark.sql (三)
    git基本常用命令总结
  • 原文地址:https://www.cnblogs.com/julymaple/p/5767238.html
Copyright © 2020-2023  润新知