根据 LRU 淘汰规则,LRU 存储提供两种存储方法:
@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 的正则表达式。
(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 | 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 指定的数据。
在文档使用中是否遇到以下问题
更多建议
匿名提交