feat:本地数据缓存服务增加缓存定期清理功能

This commit is contained in:
duanshengchao 2026-01-20 16:49:59 +08:00
parent 3e1ef91353
commit b740377763
3 changed files with 19 additions and 1 deletions

View File

@ -5,6 +5,7 @@
#include <QObject> #include <QObject>
#include <QHash> #include <QHash>
#include <QUrl> #include <QUrl>
#include <QTimer>
class QSettings; class QSettings;
class QNetworkAccessManager; class QNetworkAccessManager;
@ -27,6 +28,7 @@ public:
private slots: private slots:
void onReceiveRealtimeData(const QString& dataMsg); void onReceiveRealtimeData(const QString& dataMsg);
void onHistoricalRequestFinished(const QString& dataID, QNetworkReply* reply); void onHistoricalRequestFinished(const QString& dataID, QNetworkReply* reply);
void cleanUpDataCache();
private: private:
struct RealtimeConfig struct RealtimeConfig
@ -95,6 +97,8 @@ private:
//数据缓存 //数据缓存
QHash<QString, QSharedPointer<MeasurementData>> m_dataCache; QHash<QString, QSharedPointer<MeasurementData>> m_dataCache;
QTimer m_dataCleanupTimer;
int m_dataCleanupInterval;
//请求记录 //请求记录
QHash<QString, QSet<QObject*>> m_dataRequesetRecord; QHash<QString, QSet<QObject*>> m_dataRequesetRecord;

View File

@ -49,7 +49,7 @@ public:
private: private:
QString m_id; QString m_id;
QSet<qint64> m_timestamps; //用于快速查找是否存在时间戳的数据 QSet<qint64> m_timestamps; //用于快速查找是否存在时间戳的数据
QMap<qint64, double> m_data; //按时间戳对数据点进行排序 QMap<qint64, double> m_data; //按时间戳对数据点进行排序
qint64 m_latestTimestamp; qint64 m_latestTimestamp;
}; };

View File

@ -55,6 +55,11 @@ void MeasurementDataManager::initialize()
m_isVaildSettingsFile = false; m_isVaildSettingsFile = false;
LOG_ERROR("ReadSettingInfo", "load measurementDataService_config.ini failed"); LOG_ERROR("ReadSettingInfo", "load measurementDataService_config.ini failed");
} }
//开启缓存数据的定期清理
m_dataCleanupInterval = 10 * 1000;
m_dataCleanupTimer.setInterval(m_dataCleanupInterval);
connect(&m_dataCleanupTimer, &QTimer::timeout, this, &MeasurementDataManager::cleanUpDataCache);
} }
void MeasurementDataManager::buildSubscriptionRequest(const QString& action, const QStringList& measurements) void MeasurementDataManager::buildSubscriptionRequest(const QString& action, const QStringList& measurements)
@ -464,3 +469,12 @@ void MeasurementDataManager::onHistoricalRequestFinished(const QString& dataID,
reply->deleteLater(); reply->deleteLater();
} }
void MeasurementDataManager::cleanUpDataCache()
{
qint64 cleanupTimestame = QDateTime::currentMSecsSinceEpoch() - (m_dataCleanupInterval * 1000);
for(auto measurementData : std::as_const(m_dataCache))
{
measurementData->cleanupOldData(cleanupTimestame);
}
}