全部產品
Search
文件中心

Mobile Platform as a Service:LRU 儲存

更新時間:Jul 13, 2024

根據 LRU 淘汰規則,LRU 儲存提供兩種儲存方法。

  • 記憶體緩衝(APLRUMemoryCache):提供記憶體 LRU 淘汰演算法的緩衝,緩衝 ID 對象。APLRUMemoryCache 是安全執行緒的,同時 LRU 演算法基於鏈表實現,效率較高。

  • 磁碟緩衝(APLRUDiskCache):提供持久化到資料庫的 LRU 淘汰演算法緩衝,緩衝支援 NSCoding 的對象。使用資料庫相比檔案會更容易維護,也使磁碟更整潔。

記憶體緩衝

  • @property (nonatomic, assign) BOOL handleMemoryWarning; // default NO

    設定是否處理系統記憶體警告,預設為 NO。如果設定為 YES,當有記憶體警告時會清空緩衝。

  • (id)initWithCapacity:(NSInteger)capacity;

    初始化,指定容量。

  • (void)setObject:(id)object forKey:(NSString*)key;

    將對象存入緩衝,如果 object 為 nil,會刪除對象。

  • (void)setObject:(id)object forKey:(NSString*)key expire:(NSTimeInterval)expire;

    將對象存入緩衝,並指定一個到期時間戳記。

  • (id)objectForKey:(NSString*)key;

    取對象。

  • (void)removeObjectForKey:(NSString*)key;

    刪除對象。

  • (void)removeAllObjects;

    刪除所有對象。

  • (void)addObjects:(NSDictionary*)objects;

    大量新增資料,無法單獨設定每個對象的 expire 時間,預設都是永不到期的對象。

  • (void)removeObjectsWithRegex:(NSString*)regex;

    大量刪除資料,資料的 key 匹配 regex 的Regex。

  • (void)removeObjectsWithPrefix:(NSString*)prefix;

    大量刪除具有某個首碼的所有資料。

  • (void)removeObjectsWithSuffix:(NSString*)suffix;

    大量刪除具有某個尾碼的所有資料。

  • (void)removeObjectsWithKeys:(NSSet*)keys;

    大量刪除所有 keys 指定的資料。

  • (NSArray*)peekObjects:(NSInteger)count fromHead:(BOOL)fromHead;

    將緩衝對象讀取到一個數組裡,但不做 LRU 緩衝策略處理。fromHead 為 YES 時,從頭開始遍曆,否則對尾開始遍曆。

  • (BOOL)objectExistsForKey:(NSString*)key;

    快速判斷某個 key 的對象是否存在,不會影響 LRU。

  • (void)resetCapacity:(NSInteger)capacity;

    更新容量,如果新容量比原先的小,會刪除部分緩衝。

磁碟緩衝

  • (id)initWithName:(NSString*)name capacity:(NSInteger)capacity userDependent:(BOOL)userDependent crypted:(BOOL)crypted;

    建立一個持久化的 LRU 緩衝,存入的對象需要支援 NSCoding 協議。

    參數如下表

    參數

    說明

    name

    緩衝的名字,用做資料庫的表名。

    capacity

    容量,實際容量會比這個大一些,解決緩衝滿時添加資料的效能問題。

    userDependent

    是否與使用者相關,如果與使用者相關,當 APDataCenter.currentUserId 為空白時緩衝無法操作;當切換使用者後,緩衝會自動指向目前使用者的表,業務無須關心這個事件。

    crypted

    資料是否加密。

    傳回值:緩衝執行個體,業務需要持有。

  • (void)setObject:(id)object forKey:(NSString*)key;

    緩衝一個對象,expire 預設為 0,也就是永不到期。

  • (void)setObject:(id)object forKey:(NSString*)key expire:(NSTimeInterval)expire;

    緩衝一個對象,並指定到期的時間戳記。

    參數如下表

    參數

    說明

    object

    對象,如果為 nil 會刪除指定 key 的對象。

    key

    -

    expire

    到期時間戳記,指定一個相對於 1970 的絕對時間戳記。可以使用 [date timeIntervalSince1970]。

  • (id)objectForKey:(NSString*)key;

    取對象,如果對象讀取出來時,指定的 expire 時間戳記已經達到,會返回 nil,並刪除對象。如果調用 objectForKey 前,有其它 setObject 操作寫資料庫未完成,會等待。

  • (void)removeObjectForKey:(NSString*)key;

    刪除對象。

  • (void)removeAllObjects;

    刪除所有對象。

  • (void)addObjects:(NSDictionary*)objects;

    大量新增資料。

  • (void)removeObjectsWithSqlLike:(NSString*)like;

    大量刪除資料,資料的 key 使用 sqlite 的 like 語句匹配。

  • (void)removeObjectsWithKeys:(NSSet*)keys;

    大量刪除所有 keys 指定的資料。