前言
本人以前寫過一個數(shù)據(jù)模型存儲方法玫鸟,是我在上上家公司做緩存框架的時候?qū)懙南眨唧w也就是在FMDB的基礎上封裝,直接對數(shù)據(jù)模型進行存儲操作钦购,如下:
最近本人也不是很忙导犹,加之在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如下: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
使用教程
- pod ‘ZFJRedisLib’
- pod install
- 導入頭文件#import “ZFJRedisHeader.h”
結(jié)束語
歡迎各位大佬提供寶貴的建議和意見萌狂,也歡迎大家進群或加本人QQ一起交流學習怀泊!