数据存储封装—支持内存和本地缓存
来源:互联网 发布:java开源门户网站 编辑:程序博客网 时间:2024/06/14 15:53
公司这几天底层进行重构,本地需要缓存一些数据,对比目前一些比较火的三方,最终决定选用Objective-LevelDB。Objective-LevelDB,是一个基于Google's LevelDB的Objective-C数据库。然后对其进行了简单封装,支持内存和本地缓存,废话少说,直接用法。
支持pod, pod ‘Objective-LevelDB’
源码git地址https://github.com/matehat/Objective-LevelDB
下面是.h封装
#import <Foundation/Foundation.h>/** * 存储服务 基于Objective-LevelDB */@interface FlyStorageManage : NSObject/* * 存储对象到内存 * * @parm object 对象 * @parm akey key */+ (void)setObjectToMemory:(id)object forKey:(NSString *)akey;/** * 内存中读取某个对象 * * @parm akey key * * @return */+ (id)objectFromMemoryForkey:(NSString *)akey;/** * 从内存中移除某个对象 * * @parm akey key */+ (void)removeObjectFromMemoryForKey:(NSString *)akey;/** * 存储对象到本地缓存 * * @parm object 对象 对象需要实现NSCoding序列化 * 也可配合MJExtension/JsonModel转换成字典存储 * @parm akey key */+ (void)setObjectToLocalCache:(id)object forKey:(NSString *)akey;/** * 从本地缓存中读取某个对象 * * @parm akey key * * @return */+ (id)objectFromLocalCacheForkey:(NSString *)akey;/** * 从本地缓存中移除某个对象 * * @parm akey key */+ (void)removeObjectFromLocalCacheForKey:(NSString *)akey;@end
然后是.m的实现
#import "FlyStorageManage.h"#import "Objective-LevelDB/Classes/LevelDB.h"@interface FlyStorageManage ()@property (nonatomic, strong) NSMutableDictionary *memoryServiceDict;@property (nonatomic, strong) LevelDB *levelDB;@endstatic NSString *const kLevelDBName = @"level.db";@implementation FlyStorageManage+ (FlyStorageManage *)shareInstance{ static dispatch_once_t onceToken; static FlyStorageManage *service = nil; dispatch_once(&onceToken, ^{ service = [[FlyStorageManage alloc] init]; }); return service;}- (instancetype)init{ if (self = [super init]) { self.memoryServiceDict = [[NSMutableDictionary alloc] init]; self.levelDB = [LevelDB databaseInLibraryWithName:kLevelDBName]; self.levelDB.encoder = ^NSData * (LevelDBKey * key, id object) { __block id result = nil; result = [NSKeyedArchiver archivedDataWithRootObject:object]; return result; }; self.levelDB.decoder = ^id (LevelDBKey * key, id data) { __block id result = nil; result = [NSKeyedUnarchiver unarchiveObjectWithData:data]; return result; }; } return self;}#pragma mark --- MemoryService+ (void)setObjectToMemory:(id)object forKey:(NSString *)akey{ // 线程安全 @synchronized (self) { if (object && akey) { [[self shareInstance].memoryServiceDict setObject:object forKey:akey]; } }}+ (id)objectFromMemoryForkey:(NSString *)akey{ @synchronized (self) { return [[self shareInstance].memoryServiceDict objectForKey:akey]; }}+ (void)removeObjectFromMemoryForKey:(NSString *)akey{ @synchronized (self) { [[self shareInstance].memoryServiceDict removeObjectForKey:akey]; }}#pragma mark --- LocalCacheService+ (void)setObjectToLocalCache:(id)object forKey:(NSString *)akey{ [[FlyStorageManage shareInstance].levelDB setObject:object forKey:akey];}+ (id)objectFromLocalCacheForkey:(NSString *)akey{ return [[FlyStorageManage shareInstance].levelDB objectForKey:akey];}+ (void)removeObjectFromLocalCacheForKey:(NSString *)akey{ [[FlyStorageManage shareInstance].levelDB removeObjectForKey:akey];}@end
下面是调用部分 (嫌序列化太麻烦,所以调用了MJ大大的MJExtension转换成字典进行存储)
- (void)viewDidLoad { [super viewDidLoad]; Person *person = [[Person alloc] init]; person.name = @"测试下"; person.age = @"18"; person.height = 14; person.textArr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",nil]; NSString *personKey = @"testKey"; NSDictionary *perDic = person.mj_keyValues; [FlyStorageManage setObjectToLocalCache:perDic forKey:personKey]; NSDictionary *dic = [CBStorageService objectFromLocalCacheForKey:personKey];}
是不是很方便简单,有需要的朋友可以直接拿去用了
0 0
- 数据存储封装—支持内存和本地缓存
- html5的页面缓存和本地数据存储支持
- 数据缓存与本地存储
- 本地存储和离线缓存
- Cocos2d-js 本地数据存储封装
- 本地数据存储之 IndexedDB 基本封装
- iOS数据库离线缓存思路和网络层封装——数据缓存操作封装
- iOS数据库离线缓存思路和网络层封装——数据缓存机制Model封装
- HTML5离线存储和本地缓存
- HTML5离线存储和本地缓存
- [转]HTML5离线存储和本地缓存
- HTML5离线存储和本地缓存
- iOS 本地存储,缓存和清除
- 网络数据解析及加载本地 缓存封装
- 理解 Android 本地数据存储 API--利用首选项、SQLite 和内部及外部内存 API
- 封装mssql数据访问类 支持存储过程,事务
- 内存缓存封装类
- 用分布式缓存文件存储数据到本地 DistributedCache
- ListView学习之优化
- 图像旋转(ccf)
- 正则表达式
- Echarts扩展之ajax异步加载tooltip数据
- 蛇形矩阵
- 数据存储封装—支持内存和本地缓存
- win7通过samba实现与linux的资源共享
- LeetCode *** 234. Palindrome Linked List
- GDUT 积木积水(栈)
- eclipse注释乱码
- 深度神经网络导论Introduction to Deep Neural Networks
- RoboCup2D team_logo
- python全局变量的使用错误
- 10w分区表,hive能跑,sparksql运行也完全能跑起来