Qt QCache 使用指南 QCache 是什么这是 Qt 官方为 LRU 设计的容器稳定、高效、代码最少。LRU 缓存‌Least Recently Used最近最少使用是一种常见的‌缓存淘汰策略‌其核心思想是当缓存空间不足时优先淘汰最久未被访问的数据项‌以保留近期可能再次被使用的数据。LRU核心原理基于‌时间局部性原理‌最近被访问的数据在未来短时间内被再次访问的概率较高。维护数据的‌访问顺序‌最近使用的数据放在“前面”最久未使用的放在“后面”。缓存满时‌移除尾部最久未用的数据‌为新数据腾出空间。常见应用场景浏览器缓存‌只保留最近访问的网页资源自动清理旧内容。操作系统内存管理‌保留最近使用的页面淘汰不活跃页面。数据库查询缓存‌缓存最近执行的查询结果提升响应速度。CPU 多级缓存L1/L2/L3‌利用高速缓存减少 CPU 等待时间。QCache应用示例#includeQCoreApplication#includeQDateTime#includeQDebug#includeQCache#includeQThreadqint64generateTaskId(){staticqint64 counter0;return(QDateTime::currentMSecsSinceEpoch()20)|((counter)0xFFFFF);}structTaskResult{boolsuccess;QString message;TaskResult(boolsfalse,constQStringmQString()):success(s),message(m){}};QCacheqint64,TaskResultm_resultCache(10);//QCacheqint64, QPairbool, QString m_resultCache2(10);boolgetTaskResult(qint64 taskId,TaskResultres){TaskResult*resultm_resultCache.object(taskId);if(!result){returnfalse;}res.successresult-success;res.messageresult-message;returntrue;}voidprocessTask(qint64 taskId){boolsuccessQDateTime::currentMSecsSinceEpoch()%2;QString tempQDateTime::currentDateTime().toString(yyyy/MM/dd hh:mm:ss.zzz);qDebug()QString(taskId%1, success%2, message%3).arg(taskId).arg(success).arg(temp);// 插入新任务(自动成为最近使用)m_resultCache.insert(taskId,newTaskResult(success,temp));//m_resultCache2.insert(taskId, new QPairbool, QString(true, temp));qDebug()Cache size:m_resultCache.size();}intmain(intargc,char*argv[]){QCoreApplicationa(argc,argv);for(inti0;i15;i){qint64 taskIdgenerateTaskId();processTask(taskId);QThread::msleep(10);}// 验证淘汰结果qDebug()Final cache count:m_resultCache.size()-------------------;for(autok:m_resultCache.keys()){TaskResult result;boolreadgetTaskResult(k,result);qDebug()QString(read %1, taskId%2, success%3, message%4).arg(read).arg(k).arg(result.success).arg(result.message);}returna.exec();}执行结果taskId1864600921498976257, success1, message2026/05/08 14:33:29.181Cache size:1taskId1864600921530433538, success1, message2026/05/08 14:33:29.211Cache size:2taskId1864600921547210755, success1, message2026/05/08 14:33:29.227Cache size:3taskId1864600921562939396, success0, message2026/05/08 14:33:29.242Cache size:4taskId1864600921580765189, success1, message2026/05/08 14:33:29.259Cache size:5taskId1864600921596493830, success0, message2026/05/08 14:33:29.274Cache size:6taskId1864600921613271047, success0, message2026/05/08 14:33:29.290Cache size:7taskId1864600921628999688, success1, message2026/05/08 14:33:29.305Cache size:8taskId1864600921645776905, success1, message2026/05/08 14:33:29.321Cache size:9taskId1864600921661505546, success0, message2026/05/08 14:33:29.336Cache size:10taskId1864600921678282763, success0, message2026/05/08 14:33:29.352Cache size:10taskId1864600921694011404, success1, message2026/05/08 14:33:29.367Cache size:10taskId1864600921711837197, success0, message2026/05/08 14:33:29.384Cache size:10taskId1864600921727565838, success1, message2026/05/08 14:33:29.399Cache size:10taskId1864600921744343055, success1, message2026/05/08 14:33:29.415Cache size:10Final cache count:10-------------------read 1, taskId1864600921596493830, success0, message2026/05/08 14:33:29.274read 1, taskId1864600921744343055, success1, message2026/05/08 14:33:29.415read 1, taskId1864600921628999688, success1, message2026/05/08 14:33:29.305read 1, taskId1864600921613271047, success0, message2026/05/08 14:33:29.290read 1, taskId1864600921645776905, success1, message2026/05/08 14:33:29.321read 1, taskId1864600921678282763, success0, message2026/05/08 14:33:29.352read 1, taskId1864600921661505546, success0, message2026/05/08 14:33:29.336read 1, taskId1864600921711837197, success0, message2026/05/08 14:33:29.384read 1, taskId1864600921694011404, success1, message2026/05/08 14:33:29.367read 1, taskId1864600921727565838, success1, message2026/05/08 14:33:29.399