最近一直在致力于為公司app添加緩存功能,為了尋找一個(gè)最佳方案,這幾天先做個(gè)技術(shù)預(yù)研,經(jīng)過(guò)這兩天的查找資料基本上確定了兩個(gè)開(kāi)源框架進(jìn)行選擇,這兩個(gè)開(kāi)源框架分別是:PINCache、YYCache,上篇已經(jīng)簡(jiǎn)單介紹了PINCache使用,本篇主要來(lái)學(xué)習(xí)一下YYCache的使用方式,以及和PINCache性能的簡(jiǎn)單對(duì)比。

關(guān)于YYCache

1. 內(nèi)存緩存(YYMemoryCache)

    存儲(chǔ)的單元是_YYLinkedMapNode,除了key和value外,還存儲(chǔ)了它的前后Node的地址_prev,_next.整個(gè)實(shí)現(xiàn)基于_YYLinkedMap,它是一個(gè)雙向鏈表,除了存儲(chǔ)了字典_dic外,還存儲(chǔ)了頭結(jié)點(diǎn)和尾節(jié)點(diǎn).它實(shí)現(xiàn)的功能很簡(jiǎn)單,就是:有新數(shù)據(jù)了插入鏈表頭部,訪問(wèn)過(guò)的數(shù)據(jù)結(jié)點(diǎn)移到頭部,內(nèi)存緊張時(shí)把尾部的結(jié)點(diǎn)移除.就這樣實(shí)現(xiàn)了淘汰算法.因?yàn)閮?nèi)存訪問(wèn)速度很快,鎖占用的時(shí)間少,所以用的速度最快的OSSpinLockLock

2. 硬盤(pán)緩存(YYDiskCache)

    采用的是文件和數(shù)據(jù)庫(kù)相互配合的方式.有一個(gè)參數(shù)inlineThreshold,默認(rèn)20KB,小于它存數(shù)據(jù)庫(kù),大于它存文件.能獲得效率的提高.key:path,value:cache存儲(chǔ)在NSMapTable里.根據(jù)path獲得cache,進(jìn)行一系列的set,get,remove操作更底層的是YYKVStorage,它能直接對(duì)sqlite和文件系統(tǒng)進(jìn)行讀寫(xiě).每次內(nèi)存超過(guò)限制時(shí),select key, filename, size from manifest order by last_access_time desc limit ?1會(huì)根據(jù)時(shí)間排序來(lái)刪除最近不常用的數(shù)據(jù).硬盤(pán)訪問(wèn)的時(shí)間比較長(zhǎng),如果用OSSpinLockLock鎖會(huì)造成CPU消耗過(guò)大,所以用的dispatch_semaphore_wait來(lái)做.

YYCache使用

1.同步方式

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營(yíng)銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營(yíng)銷培訓(xùn)

    //模擬數(shù)據(jù)
    NSString *value=@"I want to know who is lcj ?";    //模擬一個(gè)key    //同步方式
    NSString *key=@"key";
    YYCache *yyCache=[YYCache cacheWithName:@"LCJCache"];    //根據(jù)key寫(xiě)入緩存value    [yyCache setObject:value forKey:key];  &nb
        
		

網(wǎng)友評(píng)論