FastSharedPreferences
Introduction: :rocket:一个 Android 平台的高性能 key-value 组件,读写性能远超 SharedPreferences
Tags:
FastSharedPreferences 是一个 Android 平台的高性能 key-value 组件。
FastSharedPreferences 特点
- 实现了 SharedPreferences 和 SharedPreferences.Editor 接口,便于无缝替换 SharedPreferences。
- 增强了 SharedPreferences,增加了写入/读取 Serializable 的接口。
- 高效的写入/读取性能,读写性能相比 SharedPreferences 增强了 200-300 倍
- 纯 java 实现,很好的兼容性和稳定性
- 实现代码简洁,aar 体积很小
- 支持跨进程使用(同时实现高性能和跨进程的难度超出预期,这一点后面会逐渐优化)
- 支持基于 LRU 的缓存管理,减少内存使用
FastSharedPreferences 原理
适合高强度/高频次写入读取
FastSharedPreferences 由 Cache 层和同步层构成,特别适合高强度/高频次写入读取数据。
内存 Cache
基于 ConcurrentHashMap 的内存 Cache 层,不仅提高了写入性能,也极大的提高了读取性能。
同步管理
通过脏数据标记等技术,减少了同步的次数,使得慢速的 I/O 不再成为读写速度的瓶颈。

FastSharedPreferences 使用指南
接入
dependencies {
compile 'com.jeremyliao:fast-sharedpreferences:0.0.1'
}
快速上手
在 application onCreate 中初始化:
FastSharedPreferences.init(context);
用法和 SharedPreferences 几乎完全一致,例如:
- [x] 写入一个整数
FastSharedPreferences sharedPreferences = FastSharedPreferences.get(FSP_ID);
sharedPreferences.edit().putInt("test_key", 100).apply();
- [x] 读取一个整数
FastSharedPreferences sharedPreferences = FastSharedPreferences.get(FSP_ID);
int ret = sharedPreferences.getInt("test_key", -1);
性能对比
我们将 FastSharedPreferences 同 SharedPreferences、SQLite 以及腾讯的 MMKV 进行对比,测试的结果是对每项测试重复 200 次取平均值(对 SharedPreferences 和 SQLite 没有重复这么多次,因为时间太长了:))。相关测试代码参见benchmark。
- 写入 1000 个整数

(测试机器是 Nexus 6 64G,Android 7.1.1,每组操作重复 200 次,时间单位是 ms)
- 读取 1000 个整数

(测试机器是 Nexus 6 64G,Android 7.1.1,每组操作重复 200 次,时间单位是 ms)
