11import { join , resolve , dirname } from "path" ;
22import { existsSync } from "fs" ;
3- import { readdir , readFile , rm , stat , writeFile , mkdir } from "fs/promises" ;
3+ import { readdir , readFile , rm , stat , writeFile , mkdir , utimes } from "fs/promises" ;
44import { useStore } from "../store" ;
55import { cacheLog } from "../logger" ;
66
@@ -21,6 +21,8 @@ export interface CacheListItem {
2121 key : string ;
2222 /** 文件大小(字节) */
2323 size : number ;
24+ /** 最后访问时间(毫秒时间戳) */
25+ atime : number ;
2426 /** 最后修改时间(毫秒时间戳) */
2527 mtime : number ;
2628}
@@ -231,6 +233,15 @@ export class CacheService {
231233 await this . init ( ) ;
232234 const { target } = this . resolveSafePath ( type , key ) ;
233235 if ( ! existsSync ( target ) ) return null ;
236+
237+ // 手动更新 atime (最后访问时间),实现 LRU 逻辑
238+ try {
239+ const now = new Date ( ) ;
240+ await utimes ( target , now , now ) ;
241+ } catch ( e ) {
242+ // 忽略 utimes 失败
243+ }
244+
234245 return await readFile ( target ) ;
235246 }
236247
@@ -282,6 +293,7 @@ export class CacheService {
282293 items . push ( {
283294 key : file . name ,
284295 size : info . size ,
296+ atime : info . atimeMs ,
285297 mtime : info . mtimeMs ,
286298 } ) ;
287299 }
@@ -290,7 +302,7 @@ export class CacheService {
290302 }
291303
292304 /**
293- * 清理旧缓存(LRU:删除最早修改的文件)
305+ * 清理旧缓存
294306 * @param type 缓存类型
295307 * @param targetFreeSize 需要腾出的空间大小
296308 */
@@ -299,8 +311,8 @@ export class CacheService {
299311 let freedSize = 0 ;
300312 const items = await this . list ( type ) ;
301313
302- // 按 mtime 升序排序 (旧的在前 )
303- items . sort ( ( a , b ) => a . mtime - b . mtime ) ;
314+ // 按 atime 升序排序 (最久未访问的在前 )
315+ items . sort ( ( a , b ) => a . atime - b . atime ) ;
304316
305317 for ( const item of items ) {
306318 if ( freedSize >= targetFreeSize ) break ;
0 commit comments