iOS-ZFJRedisLib-超便捷的键值对存储方案,Sqlite数据模型存储库,APP缓存解决方案

前言

本人以前写过一个数据模型存储方法,是我在上上家公司做缓存框架的时候写的,具体也就是在FMDB的基础上封装,直接对数据模型进行存储操作,如下:

《iOS-基于FMDB的操作封装,模型对象的增删改查》

最近本人也不是很忙,加之在Python项目中用到Redis和在APP中用到NSUserDefaults,我就想做一个便捷的基于数据库的键值对存储方案,当然这个方案并不比Redis优秀,我们也知道Redis是直接从内存中读取,所以速度方面没法说,但是在APP中我们不能把键值对放在内存中吧,本来APP的内存就不宽裕!

ZFJRedisLib

功能结构

ZFJRedisLib主要包含ZFJRedis和ZFJTable两部分,ZFJRedis主要是用于键值对存储,使用简单方便;ZFJTable主要是对于数据模型进行增删改查操作!全部API如下:
image

ZFJRedis

ZFJRedis将会自动在本地创建一个ZFJRedis的表,用于存储键值对数据;

1.存取值

字符串-NSString

    // NSString
    [ZFJRedis zfj_setValue:@"zhangfujie1128222====" forKey:@"name"];
    // 取值
    NSString *value = [ZFJRedis zfj_valueForKey:@"name"];
    NSLog(@"%@",value);

数字对象-NSNumber

    // NSNumber
    [ZFJRedis zfj_setValue:@(20) forKey:@"age"];
    // 取值
    NSNumber *age = [ZFJRedis zfj_valueForKey:@"age"];
    NSLog(@"%@",age);

数组-NSArray

    // NSArray
    [ZFJRedis zfj_setValue:@[@"111", @(222)] forKey:@"array1"];
    // 取值
    NSArray *array = [ZFJRedis zfj_valueForKey:@"array1"];
    NSLog(@"%@",array);

字典-NSDictionary

    // NSDictionary
    NSDictionary *dict = @{@"name":@"zhangfujie", @"age":@(22), @"sex":@"man"};
    [ZFJRedis zfj_setValue:dict forKey:@"zfj_infors"];
    // 取值
    NSDictionary *dict_value = [ZFJRedis zfj_valueForKey:@"zfj_infors"];
    NSLog(@"%@",dict_value);

数据-NSData

    // NSData
    NSData *data = [NSJSONSerialization dataWithJSONObject:@[@"aaaaa", @"bbbbb"] options:NSJSONWritingPrettyPrinted error:nil];
    [ZFJRedis zfj_setValue:data forKey:@"arrayData"];
    // 取值
    NSData *data_new = [ZFJRedis zfj_valueForKey:@"arrayData"];
    NSLog(@"data_new == %@",data_new);

数据模型-model

    // NSObject 数据模型
    ZFJModel *model = [[ZFJModel alloc] init];
    model.name = @"张福杰";
    model.age = 22;
    // 存
    [ZFJRedis zfj_setValue:model forKey:@"model"];
    // 取值
    ZFJModel *model_my = [ZFJRedis zfj_valueForKey:@"model"];
    NSLog(@"%@",model_my.name);
    NSLog(@"%ld",model_my.age);

批量存数据

    //根据字典赋值
    NSMutableDictionary *value_dict = [[NSMutableDictionary alloc] init];
    [value_dict setValue:@"aaaaaaaa" forKey:@"key_string"];
    [value_dict setValue:@(111) forKey:@"key_number"];
    [value_dict setValue:@[@"wwwwwww11111", @(222)] forKey:@"key_array"];
    [value_dict setValue:@{@"name":@"zhangfujie", @"age":@(22)} forKey:@"key_dict"];
    [value_dict setValue:model_my forKey:@"key_model"];
    [ZFJRedis zfj_setValuesForKeysWithDictionary:value_dict];

批量取数据

    NSDictionary *dict = [ZFJRedis zfj_dictionaryWithValuesForKeys:value_dict.allKeys];
    NSLog(@"dict == %@",dict);

2.查询

获取全部keys

    // 获取全部keys
    NSArray *keys = [ZFJRedis zfj_allKeys];
    NSLog(@"keys == %@",keys);

获取全部values

    // 获取全部values
    NSArray *values = [ZFJRedis zfj_allValues];
    NSLog(@"values == %@",values);

获取全部条数

    // 获取全部条数
    NSInteger count = [ZFJRedis zfj_count];
    NSLog(@"count == %ld",count);

判断key是否存在

    // 判断当前key是否存在
    BOOL isExist = [ZFJRedis zfj_isExistkey:@"name"];
    if(isExist){
        NSLog(@"name 存在");
    }else{
        NSLog(@"name 不存在");
    }

3.删除

根据key删除

    // 删除
    [ZFJRedis zfj_removeObjectForKey:@"array"];

根据keys删除

    // 根据keys删除数据
    NSArray *key_list = @[@"name", @"age"];
    [ZFJRedis zfj_removeObjectsForKeys:key_list];

删除全部

    // 删除全部
    [ZFJRedis zfj_removeAllObjects];

ZFJTable

ZFJTable是根据数据模型自动创建表,直接根据模型进行增删改查操作的!

1.创建表

    // 创建表
    BOOL isScu = [ZFJTable zfj_createTable:[ZFJModel class]];
    if(isScu){
        NSLog(@"ZFJModel表创建成功");
    }else{
        NSLog(@"ZFJModel表创建失败");
    }

2.删除表

    //删除表
    BOOL isScu = [ZFJTable zfj_removeTable:[ZFJModel class]];
    if(isScu){
        NSLog(@"ZFJModel表删除成功");
    }else{
        NSLog(@"ZFJModel表删除失败");
    }

3.删除全部表

    // 删除数据库
    BOOL isScu = [ZFJTable zfj_removeAllTables];
    if(isScu){
        NSLog(@"数据库删除成功");
    }else{
        NSLog(@"数据库删除失败");
    }

4.插入数据

    // 插入一条数据
    ZFJModel *model_0 = [[ZFJModel alloc] init];
    model_0.name = @"张福杰";
    model_0.age = 22;
    model_0.gender = @"男";
    [ZFJTable zfj_insertModel:model_0 completed:^(NSError * _Nonnull error) {
        NSLog(@"error:%@",error);
    }];

    // 插入多条数据
    ZFJModel *model_0 = [[ZFJModel alloc] init];
    model_0.name = @"张福杰";
    model_0.age = 22;
    model_0.gender = @"男";

    ZFJModel *model_1 = [[ZFJModel alloc] init];
    model_1.name = @"大白菜";
    model_1.age = 88;
    model_1.gender = @"女";
    NSArray *models = @[model_0, model_1];
    [ZFJTable zfj_insertModels:models completed:^(NSError * _Nonnull error) {
        NSLog(@"error:%@",error);
    }];

5.删除数据

    // 删除数据
    BOOL isScu = [ZFJTable zfj_deleteModel:[ZFJModel class] where:@"name = '张福杰'"];
    if(isScu){
        NSLog(@"数据删除成功");
    }else{
        NSLog(@"数据删除失败");
    }

6.修改数据

    // 修改数据
    ZFJModel *model_2 = [[ZFJModel alloc] init];
    model_2.name = @"大白菜";
    model_2.age = 22;
    model_2.gender = @"女";
    [ZFJTable zfj_updateModel:model_2 byKey:@"name" completed:^(NSError * _Nonnull error) {
        NSLog(@"error:%@",error);
    }];

    // 修改多条数据
    ZFJModel *model_3 = [[ZFJModel alloc] init];
    model_3.name = @"张福杰";
    model_3.age = 222;
    model_3.gender = @"男男";

    ZFJModel *model_4 = [[ZFJModel alloc] init];
    model_4.name = @"大白菜";
    model_4.age = 222;
    model_4.gender = @"女女";

    NSArray *models = @[model_3, model_4];
    [ZFJTable zfj_updateModels:models byKey:@"name" completed:^(NSError * _Nonnull error) {
        NSLog(@"error:%@",error);
    }];

7.数据查询

    // 查询全部数据
    [ZFJTable zfj_selectTable:[ZFJModel class] completed:^(NSError * _Nonnull error, NSArray * _Nonnull models) {
        for (ZFJModel *model in models) {
            NSLog(@"%@",model.name);
        }
    }];

    // 条件查询
    [ZFJTable zfj_selectTable:[ZFJModel class] where:@"name = '张福杰'" completed:^(NSError * _Nonnull error, NSArray * _Nonnull models) {
        for (ZFJModel *model in models) {
            NSLog(@"%@",model.name);
        }
    }];

    // 查询数据条数
    NSInteger count = [ZFJTable zfj_selectTableCount:[ZFJModel class]];
    NSLog(@"count == %ld",count);

    // 根据条件查询数量
    NSDictionary *parameters = @{@"name":@"张福杰", @"age":@(22)};
    NSString *sqlStr = @"name = '张福杰' and age = '22'";
    NSInteger count = [ZFJTable zfj_selectTableCount:[ZFJModel class] where:sqlStr];
    NSLog(@"count == %ld",count);

8.表扩展字段

    // 向某个表添加一个字段
    BOOL isScu = [ZFJTable zfj_addProperty:[ZFJModel class] propertyName:@"newPro_1"];
    if(isScu){
        NSLog(@"字段添加成功");
    }else{
        NSLog(@"字段添加失败");
    }

8.错误信息

    // 最后一条错误
    NSError *error = [ZFJTable zfj_lastTableError];
    NSLog(@"error == %@",error);

源码

DEMO地址:https://gitee.com/zfj1128/ZFJRedisLib

GitHub地址:https://github.com/zfjsyqk/ZFJRedisLib

使用教程

  1. pod ‘ZFJRedisLib’
  2. pod install
  3. 导入头文件#import “ZFJRedisHeader.h”

结束语

欢迎各位大佬提供宝贵的建议和意见,也欢迎大家进群或加本人QQ一起交流学习!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 我未到寒窗时代时,常常是病殃殃的。年根下,时常沾染小风小寒。听母亲讲过,某个阳历年的时候,父亲兜里揣的二百块不翼而...
    阿毛一身猫毛阅读 293评论 0 1
  • 一个画框 斑驳流离着束束光线 窗明几净,翰墨浓香 时光荏苒着匆匆那年 你在窗外,我在檐下 坐在夕阳斑驳的流年里 抱...
    洪坤先生阅读 253评论 2 1