PB 缓存数据指南

简介: ### 概述 在目前的支付宝客户端开发中, PB 格式已经是网络传输的序列化/反序列化方案的标配。但 PB 同时对我们 native 开发中的缓存实现也是有很大价值的。 ### 缓存方案对比 本人对比了如下几种客户端的缓存方案: * PB + DiskLruCache * Orml

概述

在目前客户端开发中, 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>
目录
相关文章
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
83 1
|
2月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
51 2
数据的存储--Redis缓存存储(二)
|
5月前
|
缓存 NoSQL Java
Redis 缓存与数据库数据不一致问题
Redis 缓存与数据库数据不一致问题
108 3
|
5月前
|
存储 缓存 中间件
|
29天前
|
存储 缓存 算法
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
|
2月前
|
缓存 监控 前端开发
处理页面缓存中数据不一致的问题
【10月更文挑战第9天】
43 2
|
2月前
|
消息中间件 缓存 NoSQL
大数据-49 Redis 缓存问题中 穿透、雪崩、击穿、数据不一致、HotKey、BigKey
大数据-49 Redis 缓存问题中 穿透、雪崩、击穿、数据不一致、HotKey、BigKey
55 2
|
4月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
135 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
4月前
|
存储 缓存 分布式计算
如何在 PySpark 中缓存数据以提高性能?
【8月更文挑战第13天】
184 8
|
5月前
|
canal 缓存 NoSQL
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;先删除缓存还是先修改数据库,双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略
Redis常见面试题(一):Redis使用场景,缓存、分布式锁;缓存穿透、缓存击穿、缓存雪崩;双写一致,Canal,Redis持久化,数据过期策略,数据淘汰策略