iOS-ZFJRedisLib-超便捷的鍵值對存儲方案竟趾,Sqlite數(shù)據(jù)模型存儲庫,APP緩存解決方案

前言

本人以前寫過一個數(shù)據(jù)模型存儲方法玫鸟,是我在上上家公司做緩存框架的時候?qū)懙南眨唧w也就是在FMDB的基礎上封裝,直接對數(shù)據(jù)模型進行存儲操作钦购,如下:

《iOS-基于FMDB的操作封裝褂萧,模型對象的增刪改查》

最近本人也不是很忙导犹,加之在Python項目中用到Redis和在APP中用到NSUserDefaults,我就想做一個便捷的基于數(shù)據(jù)庫的鍵值對存儲方案磕昼,當然這個方案并不比Redis優(yōu)秀节猿,我們也知道Redis是直接從內(nèi)存中讀取,所以速度方面沒法說纫骑,但是在APP中我們不能把鍵值對放在內(nèi)存中吧九孩,本來APP的內(nèi)存就不寬裕躺彬!

ZFJRedisLib

功能結(jié)構(gòu)

ZFJRedisLib主要包含ZFJRedis和ZFJTable兩部分梅惯,ZFJRedis主要是用于鍵值對存儲仿野,使用簡單方便脚作;ZFJTable主要是對于數(shù)據(jù)模型進行增刪改查操作!全部API如下:
image

ZFJRedis

ZFJRedis將會自動在本地創(chuàng)建一個ZFJRedis的表劣针,用于存儲鍵值對數(shù)據(jù)捺典;

1.存取值

字符串-NSString

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

數(shù)字對象-NSNumber

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

數(shù)組-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);

數(shù)據(jù)-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);

數(shù)據(jù)模型-model

    // NSObject 數(shù)據(jù)模型
    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);

批量存數(shù)據(jù)

    //根據(jù)字典賦值
    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];

批量取數(shù)據(jù)

    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);

獲取全部條數(shù)

    // 獲取全部條數(shù)
    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.刪除

根據(jù)key刪除

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

根據(jù)keys刪除

    // 根據(jù)keys刪除數(shù)據(jù)
    NSArray *key_list = @[@"name", @"age"];
    [ZFJRedis zfj_removeObjectsForKeys:key_list];

刪除全部

    // 刪除全部
    [ZFJRedis zfj_removeAllObjects];

ZFJTable

ZFJTable是根據(jù)數(shù)據(jù)模型自動創(chuàng)建表牍陌,直接根據(jù)模型進行增刪改查操作的!

1.創(chuàng)建表

    // 創(chuàng)建表
    BOOL isScu = [ZFJTable zfj_createTable:[ZFJModel class]];
    if(isScu){
        NSLog(@"ZFJModel表創(chuàng)建成功");
    }else{
        NSLog(@"ZFJModel表創(chuàng)建失敗");
    }

2.刪除表

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

3.刪除全部表

    // 刪除數(shù)據(jù)庫
    BOOL isScu = [ZFJTable zfj_removeAllTables];
    if(isScu){
        NSLog(@"數(shù)據(jù)庫刪除成功");
    }else{
        NSLog(@"數(shù)據(jù)庫刪除失敗");
    }

4.插入數(shù)據(jù)

    // 插入一條數(shù)據(jù)
    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);
    }];

    // 插入多條數(shù)據(jù)
    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.刪除數(shù)據(jù)

    // 刪除數(shù)據(jù)
    BOOL isScu = [ZFJTable zfj_deleteModel:[ZFJModel class] where:@"name = '張福杰'"];
    if(isScu){
        NSLog(@"數(shù)據(jù)刪除成功");
    }else{
        NSLog(@"數(shù)據(jù)刪除失敗");
    }

6.修改數(shù)據(jù)

    // 修改數(shù)據(jù)
    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);
    }];

    // 修改多條數(shù)據(jù)
    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.數(shù)據(jù)查詢

    // 查詢?nèi)繑?shù)據(jù)
    [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);
        }
    }];

    // 查詢數(shù)據(jù)條數(shù)
    NSInteger count = [ZFJTable zfj_selectTableCount:[ZFJModel class]];
    NSLog(@"count == %ld",count);

    // 根據(jù)條件查詢數(shù)量
    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”

結(jié)束語

歡迎各位大佬提供寶貴的建議和意見萌狂,也歡迎大家進群或加本人QQ一起交流學習怀泊!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末霹琼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子枣申,更是在濱河造成了極大的恐慌忠藤,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尖阔,死亡現(xiàn)場離奇詭異,居然都是意外死亡谴供,警方通過查閱死者的電腦和手機齿坷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門胃夏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仰禀,你說我怎么就攤上這事答恶∑加眨” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵包竹,是天一觀的道長籍凝。 經(jīng)常有香客問我饵蒂,道長,這世上最難降的妖魔是什么退盯? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任渊迁,我火速辦了婚禮琉朽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漓骚。我一直安慰自己榛泛,他們只是感情好曹锨,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布剃允。 她就那樣靜靜地躺著斥废,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捧灰。 梳的紋絲不亂的頭發(fā)上统锤,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音煌寇,去河邊找鬼逾雄。 笑死,一個胖子當著我的面吹牛银锻,可吹牛的內(nèi)容都是我干的辽故。 我是一名探鬼主播誊垢,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼殃饿!你這毒婦竟也來了芋肠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤吭净,失蹤者是張志新(化名)和其女友劉穎肴甸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體友扰,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡庶柿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年浮庐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腊敲。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡维苔,死狀恐怖介时,靈堂內(nèi)的尸體忽然破棺而出凌彬,到底是詐尸還是另有隱情,我是刑警寧澤铲敛,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布伐蒋,位于F島的核電站,受9級特大地震影響俭正,放射性物質(zhì)發(fā)生泄漏焙畔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一儿惫、第九天 我趴在偏房一處隱蔽的房頂上張望澡罚。 院中可真熱鬧,春花似錦肾请、人聲如沸留搔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽催式。三九已至,卻和暖如春避归,著一層夾襖步出監(jiān)牢的瞬間荣月,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工梳毙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哺窄,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓萌业,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奸柬。 傳聞我的和親對象是個殘疾皇子生年,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 我未到寒窗時代時,常常是病殃殃的廓奕。年根下抱婉,時常沾染小風小寒。聽母親講過桌粉,某個陽歷年的時候蒸绩,父親兜里揣的二百塊不翼而...
    阿毛一身貓毛閱讀 304評論 0 1
  • 一個畫框 斑駁流離著束束光線 窗明幾凈,翰墨濃香 時光荏苒著匆匆那年 你在窗外铃肯,我在檐下 坐在夕陽斑駁的流年里 抱...
    洪坤先生閱讀 255評論 2 1