PB快取資料指南
概述
在目前客戶端開發中, PB 格式已經是網路傳輸的序列化/反序列化方案的標配。但 PB 同時對我們 native 開發中的快取實現也是有很大價值的。
快取方案對比
本人對比了如下幾種客戶端的快取方案:
- PB + DiskLruCache
- Ormlite/Sqlite
- Gson + DiskLruCache
其中 PB + DiskLruCache 方案與 Gson + DiskLruCache 方案的效能對比如下:
07-25 16:51:51.319 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] json write consume=35
07-25 16:51:51.429 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] json read consume=110
07-25 16:51:51.439 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] pb write consume=10
07-25 16:51:51.489 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] pb read consume=45
07-25 16:52:11.229 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] json write consume=29
07-25 16:52:11.319 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] json read consume=87
07-25 16:52:11.319 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] pb write consume=5
07-25 16:52:11.329 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] pb read consume=6
07-25 16:53:46.259 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] json write consume=36
07-25 16:53:46.329 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] json read consume=72
07-25 16:53:46.339 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] pb write consume=5
07-25 16:53:46.339 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] pb read consume=5
07-25 16:54:14.159 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] json write consume=39
07-25 16:54:14.249 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] json read consume=85
07-25 16:54:14.249 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] pb write consume=5
07-25 16:54:14.259 28287-28287/com.eg.android.AlipayGphone D/HomePresenter: [28287:main] pb read consume=5
實測資料:
json write | pb write | json read | pb read |
---|---|---|---|
35 | 10 | 110 | 45 |
29 | 5 | 87 | 6 |
36 | 5 | 72 | 5 |
39 | 5 | 85 | 5 |
分項加總後:
json write | pb write | json read | pb read |
---|---|---|---|
139 | 25 | 354 | 61 |
可以看出寫操作,pb 所花時間僅佔 json 的18%;讀操作,pb 所花時間僅佔 json 的17%。此外,OrmLite/Sqlite 在效能方面與 json 相當。
使用 PB 快取的正確姿勢
既然好處是明顯的,我們看下如何應用這項新技巧,直接上程式碼:
QueryCommunityResp queryCommunityResp = ...; // 目標繼承自 Message 的PB model 的例項
queryCommunityResp.toByteArray(); // 序列化
final Wire wire = new Wire();
try {
QueryCommunityResp newResp = wire.parseFrom(queryCommunityResp.toByteArray(),
QueryCommunityResp.class); // 反序列化
} catch (IOException e) {
// TODO: handle exception
}
別忘了新增 api 包依賴:
<dependency>
<groupId>com.alipay.android.phone.thirdparty</groupId>
<artifactId>wire-api</artifactId>
<version>1.5.3</version>
<scope>provided</scope>
</dependency>
相關文章
- PB級資料持久化快取系統——lest持久化快取
- Netflix 如何預熱快取?利用EBS移動PB級資料快取
- http快取與cdn快取配置指南HTTP快取
- .net資料快取快取
- memcached資料庫快取資料庫快取
- Redis快取php資料Redis快取PHP
- DataTable快取資料操作快取
- 快取淘汰、快取穿透、快取擊穿、快取雪崩、資料庫快取雙寫一致性快取穿透資料庫
- 微信清除快取資料方法快取
- 資料快取的實現快取
- 資料物件的快取策略物件快取
- Spark讀取elasticsearch資料指南SparkElasticsearch
- Web快取知多少(快取機制和資料儲存)Web快取
- 系統快取全解析4:應用程式資料快取快取
- 檢視資料字典快取(或行快取)的丟失率快取
- 報表資料的可控快取快取
- 前端快取API請求資料前端快取API
- 微信小程式之資料快取微信小程式快取
- 快速搭建Redis快取資料庫Redis快取資料庫
- .NET之頁面資料快取快取
- Nginx 快取使用指南-簡單Nginx快取
- [譯] HTTP 快取頭部 - 完全指南HTTP快取
- pb資料視窗型別型別
- 分散式快取--快取與資料庫一致性方案分散式快取資料庫
- Python操作Redis快取資料庫PythonRedis快取資料庫
- 【UniApp】-uni-app-資料快取APP快取
- Redis快取資料庫-快速入門Redis快取資料庫
- 清除快取資料--工具類封裝快取封裝
- iOS 網路請求資料快取iOS快取
- 快取依賴(檔案、資料庫)快取資料庫
- PB中建立資料庫的方法資料庫
- 【TcaplusDB知識庫】PB表 C++ 示例程式碼-讀取資料C++
- Redis快取穿透、擊穿、雪崩,資料庫與快取一致性Redis快取穿透資料庫
- MYSQL---SQL語句的資料快取MySql快取
- 究竟先操作快取,還是資料庫?快取資料庫
- 從 0 學習 Spring 快取資料Spring快取
- 禁止頁面快取資料的方法分享快取
- 聊聊資料庫和快取同步機制資料庫快取