iOS—缓存YYCache框架

下载地址 :点击打开链接

一、简介:
计算上的的cache 就是高速缓存,计算机组成课程里的定义是,存在于主存和cpu之间,主要用于解决CPU处理数据的速度远远大于读取主存数据的速度。
手机上也有cache ,主要作用是保存一些软件生成的临时文件,避免每次都要重复地向服务器请求相同的数据,即浪费用户流量,也影响app响应速度。
二、YYCache 的组成
YYCache 由YYcache、YYDiskCache、YYMemoryCache 和YYKVStroage组成,其中YYKVStorage可直接对sqlite 和文件系统进行读写(YYDiskCache的底屋实现)

注意点
1.如果保存的自定义对象不遵守 NSCoding的协议或不实现 NSCoding协议的方法,就不能使用YYDiskCache进行长期缓存;
- (void)encodeWithCoder:(NSCoder *)aCoder;- (instancetype)initWithCoder:(NSCoder *)aDecoder;

一、YYCache 基本使用
1、同步方式
  //模拟数据
    NSString *value=@"I want to know who is lcj ?";
    //模拟一个key
    //同步方式
    NSString *key=@"key";
    YYCache *yyCache=[YYCache cacheWithName:@"LCJCache"];
    //根据key写入缓存value
    [yyCache setObject:value forKey:key];
    //判断缓存是否存在
    BOOL isContains=[yyCache containsObjectForKey:key];
    NSLog(@"containsObject : %@", isContains?@"YES":@"NO");
    //根据key读取数据
    id vuale=[yyCache objectForKey:key];
    NSLog(@"value : %@",vuale);
    //根据key移除缓存
    [yyCache removeObjectForKey:key];
    //移除所有缓存
    [yyCache removeAllObjects];



2、异步方式
 //模拟数据
    NSString *value=@"test文字";
    //存取时key
    NSString *key =@"key";
    //创建目录
    YYCache *cache=[YYCache cacheWithName:@"haha"];
    
    //判断缓存是否存在
    [cache containsObjectForKey:key withBlock:^(NSString * _Nonnull key, BOOL contains) {
        
    }];
    
    //根据key写入缓存
    
    [cache setObject:value forKey:key withBlock:^{
        
    }];
    
    
    //读取
    [cache objectForKey:key withBlock:^(NSString * _Nonnull key, id<NSCoding>  _Nonnull object) {
        
        NSLog(@"%@",object);
    }];
    
    //根据key 移除缓存
    
    [cache removeObjectForKey:key withBlock:^(NSString * _Nonnull key) {
        
    }];
    
    // 移除所有缓存
    [cache removeAllObjectsWithBlock:^{
        
    }];
    
    //移除所有缓存带进度
    [cache removeAllObjectsWithProgressBlock:^(int removedCount, int totalCount) {
        
        
    } endBlock:^(BOOL error) {
        
        if (!error) {
            
            NSLog(@"移除成功");
        }
        else
        {
            NSLog(@"移除失败");
        }
        
    }];
二、YYCache 缓存LRU清理
LRU(Least Recently used)算法大家都比较熟悉,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存10000条数据,当数据小于10000时可以随意添加,当超过10000时就需要把新的数据添加进来,同时要把过期数据删除,以确保我们最大缓存10000条,那怎么确定删除哪条过期数据呢,采用LRU算法实现的话就是将最老的数据删掉。
    YYCache *cache=[YYCache cacheWithName:@"myText"];
    
    //内存最大缓存数据个数
    [cache.memoryCache setCountLimit:50];
    
    //内存最大缓存开销,目前这个没有效果
    [cache.memoryCache setCostLimit:1*1024];
    
    //磁盘最大缓存开销
    [cache.diskCache setCostLimit:1*1024];
    
    //磁盘最大缓存数据个数
    [cache.diskCache setCountLimit:50];
    
    //设置磁盘lru动态清理频率 默认 60秒
    [cache.diskCache setAutoTrimInterval:60];
    
    
    for (int i=0; i<100; i++) {
        
        NSString *str=[NSString stringWithFormat:@"第%d条数据",i+1];
        
        NSString *key=[NSString stringWithFormat:@"key%d",i];
        
        [cache setObject:str  forKey:key];
        
        
    }
    
    NSLog(@"cache.memoryCache.totalCost=%lu",(unsigned long)cache.memoryCache.totalCost);
    NSLog(@"cache.memoryCache.costLimit=%lu",(unsigned long)cache.memoryCache.costLimit);
   
    
     NSLog(@"cache.memoryCache.totalCount=%lu",(unsigned long)cache.memoryCache.totalCount);
     NSLog(@"cache.memoryCache.countLimit=%lu",(unsigned long)cache.memoryCache.countLimit);
    
    
    NSLog(@"cache.diskCache.totalCost=%lu",(unsigned long)cache.diskCache.totalCost);
    NSLog(@"cache.diskCache.costLimit=%lu",(unsigned long)cache.diskCache.costLimit);
    
    NSLog(@"cache.diskCache.totalCount=%lu",(unsigned long)cache.diskCache.totalCount);
    NSLog(@"cache.diskCache.countLimit=%lu",(unsigned long)cache.diskCache.countLimit);
    
    
    for(int i=0 ;i<100;i++){
        //模拟一个key
        NSString *key=[NSString stringWithFormat:@"key%d",i];
        
        id vuale=[cache objectForKey:key];
        NSLog(@"%@=%@",key ,vuale);
    }
    




猜你喜欢

转载自blog.csdn.net/u012189584/article/details/77369546
今日推荐