最近一直在致力于為公司app添加緩存功能,為了尋找一個最佳方案,這幾天先做個技術(shù)預(yù)研,經(jīng)過這兩天的查找資料基本上確定了兩個開源框架進行選擇,這兩個開源框架分別是:PINCache、YYCache,上篇已經(jīng)簡單介紹了PINCache使用,本篇主要來學(xué)習(xí)一下YYCache的使用方式,以及和PINCache性能的簡單對比。
關(guān)于YYCache
1. 內(nèi)存緩存(YYMemoryCache)
存儲的單元是_YYLinkedMapNode,除了key和value外,還存儲了它的前后Node的地址_prev,_next.整個實現(xiàn)基于_YYLinkedMap,它是一個雙向鏈表,除了存儲了字典_dic外,還存儲了頭結(jié)點和尾節(jié)點.它實現(xiàn)的功能很簡單,就是:有新數(shù)據(jù)了插入鏈表頭部,訪問過的數(shù)據(jù)結(jié)點移到頭部,內(nèi)存緊張時把尾部的結(jié)點移除.就這樣實現(xiàn)了淘汰算法.因為內(nèi)存訪問速度很快,鎖占用的時間少,所以用的速度最快的OSSpinLockLock
2. 硬盤緩存(YYDiskCache)
采用的是文件和數(shù)據(jù)庫相互配合的方式.有一個參數(shù)inlineThreshold,默認(rèn)20KB,小于它存數(shù)據(jù)庫,大于它存文件.能獲得效率的提高.key:path,value:cache存儲在NSMapTable里.根據(jù)path獲得cache,進行一系列的set,get,remove操作更底層的是YYKVStorage,它能直接對sqlite和文件系統(tǒng)進行讀寫.每次內(nèi)存超過限制時,select key, filename, size from manifest order by last_access_time desc limit ?1會根據(jù)時間排序來刪除最近不常用的數(shù)據(jù).硬盤訪問的時間比較長,如果用OSSpinLockLock鎖會造成CPU消耗過大,所以用的dispatch_semaphore_wait來做.
YYCache使用
1.同步方式
//模擬數(shù)據(jù) NSString *value=@"I want to know who is lcj ?"; //模擬一個key //同步方式 NSString *key=@"key"; YYCache *yyCache=[YYCache cacheWithName:@"LCJCache"]; //根據(jù)key寫入緩存value [yyCache setObject:value forKey:key]; &nb