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

View File

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

View File

@ -55,6 +55,11 @@ void MeasurementDataManager::initialize()
m_isVaildSettingsFile = false;
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)
@ -464,3 +469,12 @@ void MeasurementDataManager::onHistoricalRequestFinished(const QString& dataID,
reply->deleteLater();
}
void MeasurementDataManager::cleanUpDataCache()
{
qint64 cleanupTimestame = QDateTime::currentMSecsSinceEpoch() - (m_dataCleanupInterval * 1000);
for(auto measurementData : std::as_const(m_dataCache))
{
measurementData->cleanupOldData(cleanupTimestame);
}
}