YYCache - 小数据缓存

作者: 居然是村长 | 来源:发表于2016-05-04 22:20 被阅读4799次

https://github.com/ibireme/YYCache

小数据存储:
1、plist(NSUserDefaults):主要是系统设置
2、cache 缓存(磁盘保存,以及内存缓存)

YYCache

sqlite3.0

1 存:存入内存的同时写入磁盘
2 读:1)先从内存读,有就直接拿来用;2)没有再从磁盘读,有就拿来用,顺便存到内存;3)还没有就返回空。

-1 总缓存(包括磁盘和内存)

// 建个小数据表
    YYCache *cache = [YYCache cacheWithName:@"userInfo"];

// 存
    [cache setObject:@"张三" forKey:@"name"];

// 检查 读取(直接读取,不存在则是 nil)
    if ([cache containsObjectForKey:@"name"]) {
        NSString *name = (NSString *)[cache objectForKey:@"name"];
        NSLog(@"%@",[name class]);
    }

// 删
    [cache removeObjectForKey:@"name"];
    [cache removeAllObjects];

  • 2 只要内存 或者 只要磁盘存储
    YYCache *cache = [YYCache cacheWithName:@"userInfo"];
    YYDiskCache *diskCache = cache.diskCache;
    YYMemoryCache *memoryCache = cache.memoryCache;

// diskCache memoryCache 与cache 存取方法一致!!

实际使用

一般用作 UserManager 单例,保存用户数据等。举个简单栗子

  • 1 .h
@interface UserManager : NSObject

+ (instancetype)manager;

@property (nonatomic, copy, readonly) NSString *name;
@property (nonatomic, copy, readonly) NSString *gender;
@property (nonatomic, assign, readonly) NSInteger age;
@property (nonatomic, strong) UserModel *userModel;

- (void)updateUserInfo:(id)userInfo;

@end
  • 2 .m
+ (instancetype)manager {
    static UserManager *instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[UserManager alloc] init];
    });
    return instance;
}

- (instancetype)init {
    self = [super init];
    if (self) {
        self.userCache = [[YYCache alloc] initWithName:@"jyw.userInfo"];
    }
    return self;
}

- (void)updateUserInfo:(id)userInfo {
    [self.userCache setObject:userInfo forKey:@"info"];
}

- (NSDictionary *)userInfo {
    if (!_userInfo) {
        id value = [self.userCache objectForKey:@"info"];
        NSDictionary *userInfo = (NSDictionary *)value;
        return userInfo;
    }
    return _userInfo;
}

- (UserModel *)userModel {
    if (!_userModel) {
        if (self.userInfo) {
            UserModel *employeeModel = [UserModel mj_objectWithKeyValues:self.userInfo];
            return employeeModel;
        }
    }
    return _userModel;
}

- (NSString *)name {
    return self.userModel.name;
}

- (NSString *)gender {
    return self.userModel.gender;
}

- (NSInteger)age {
    return self.userModel.age;
}
  • 3 使用
    NSDictionary *userInfo = @{@"name":@"张三",
                               @"gender":@"男",
                               @"age":@"18"};
    
    [[UserManager manager] updateUserInfo:userInfo];
    
    NSLog(@"%@",[UserManager manager].name);
    NSLog(@"%@",[UserManager manager].gender);
    NSLog(@"%zi",[UserManager manager].age);

1

相关文章

网友评论

  • 加双芋:user相关建议字典形式存储在NSUserDefaults
  • 梁森的简书:对链表的那些操作并没有看太懂😓
  • 棍武中原:楼主,存储到内存和存储到磁盘有何不同?
    居然是村长:@棍武中原 参考电脑的内存和硬盘的区别。
  • MMD_: 想问一下。怎样才能到达sqlit方式存储, 比如指定一个键值对,多条数据存储,
    查询类似通过键值对。查询
  • 61e00efbcbbf:用户的模型存内存和磁盘,如果只是一个字符串呢,有必要写入磁盘吗
    61e00efbcbbf:@说了是村长 👌谢谢
    居然是村长:@萨瓦迪卡s 内存里是临时的,你需要永久的话就需要存磁盘
  • feng_dev:没有获取所有数据的方法吗,好像还没有唐巧的那个 YTKKeyValueStore 方便。
    居然是村长:@CodeGeass 只能通过 key 获取指定数据;你想做什么?
    CodeGeass:@说了是村长 请问YYCache里面获取所有数据的方法
    居然是村长:@伤感的小孩 有啊,两个原理不一样~
  • 这小子:你好,yycache配合单例存储数据安全吗?
    这小子:yycache配合单例存储相比单例来说性能会更好吗?
    这小子:账号和密码或者金额之类的存储不都需要加密之类的吗?
    居然是村长:@这小子1992 你说的安全指什么?
  • 4fbda65ece0f:我想问一下,存到磁盘的话,我关掉app重新打开是不是应该能从磁盘读取到存的数据呀?
    居然是村长:@zongyuan 是的。
  • 还好我不懂:没有明确写出self.userCache 和 self.userModel 是什么......初学的很不容易搞明白
    居然是村长:@还好我不懂 嗯。加油……
    还好我不懂:@说了是村长 挺不错.....有时间, 自己也得封装一套
    居然是村长:@还好我不懂 写得不好,见谅……
  • jetgege:没有的设置缓存最大上线吗
  • 我把今生当成了来世:缓存清除 不就都没有了么?想了解硬盘存储,是不是必须本地存在sqlite数据库呢,还请指教下。
    我把今生当成了来世:@说了是村长 嗯嗯 感谢了。 :smile:
    居然是村长:@AwakenNullIOS 另外,数据存储有很多方案,不仅仅squlite。可以用plist,存文件,coredata等,
    居然是村长:@AwakenNullIOS 这个框架本身存储了两个地方。本地数据库一份,以及内存一份。本地的没有删除就没有问题。使用时自动先查询内存,没有再查本地,如果内存没有,会从本地读一份到内存。
  • 挂着铃铛的兔:太棒了,研究了一上午还是没明白怎么用. 一直提醒我没有权限...可以加一个你的QQ吗?
    居然是村长:@挂着铃铛的兔 我加你吧。。

本文标题:YYCache - 小数据缓存

本文链接:https://www.haomeiwen.com/subject/qrtdrttx.html