DBFlow文档:缓存

作者: linheimx | 来源:发表于2016-09-17 11:38 被阅读340次

前言

为了提高性能,DBFlow 支持缓存。这可以快速的获取到你想要的数据。

注意1

  1. 默认是不启用缓存的,但可以很容易的去启用缓存。
  2. 缓存用于model 的的查询中。

注意2
如下情况,缓存应该被使用:

  1. 从相同的 Model 中多次查询。
  2. 对整个 Model 对象做查询。(基于主键 @PrimaryKey)

如下情况,缓存不应该被使用:

  1. 执行部分查询或复杂的查询。
  2. 当你的Model被增删改了。(出现这种情况,最好清除缓存!)

支持缓存的类

  1. SparseArray ---》SparseArrayBasedCache (platform SparseArray)
  2. Map ---》 SimpleMapCache
  3. LruCache ---》 ModelLruCache (copy of LruCache, so dependency avoided)

启用缓存

针对有一个主键的表,用如下方式启用:

@Table(database = AppDatabase.class, cachingEnabled = true)
public class CacheableModel extends BaseModel {

    @Column
    @PrimaryKey(autoincrement = true)
    long id;

    @Column
    String name;
}

从数据库中加载数据流程

当从数据库中获取数据时,我们仍然会执行一根完整的查询,返回一个Cursor。通过检查每一行的主键,若主键在缓存中存在,我们则直接返回该对象,这导致我们可能会跳过昂贵的转换过程(提高查询速度!)。

注意多线程访问缓存,对缓存的修改可能会出现问题哦!

高级

  1. 指定缓存的大小
@Table(cacheSize = {size})
  1. 自定义缓存
@ModelCacheFieldpublic static ModelCache<CacheableModel3, ?> modelCache = new SimpleMapCache<>(); // replace with any cache you want.
  1. 针对有多个主键的表,用如下方式启用:
@Table(database = AppDatabase.class, cachingEnabled = true)
public class Coordinate extends BaseModel {

    @MultiCacheField
    public static final IMultiKeyCacheConverter<String> multiKeyCacheModel = new IMultiKeyCacheConverter<String>() {

        @Override
        @NonNull
        public String getCachingKey(@NonNull Object[] values) {
            return "(" + values[0] + "," + values[1] + ")";
        }
    };

    @PrimaryKey
    double latitude;

    @PrimaryKey
    double longitude;

请注意该字段:public static final IMultiKeyCacheConverter<String> multiKeyCacheModel
---> <String>:指定对象返回的类型。
---> 方法getCachingKey:Object[] values中存放的是你的声明的主键的顺序。

相关文章

  • DBFlow文档:缓存

    前言 为了提高性能,DBFlow 支持缓存。这可以快速的获取到你想要的数据。 注意1 默认是不启用缓存的,但可以很...

  • DbFlow sqlcipher 加密存储

    前言 在学习Dbflow的使用过程中,发现官方文档没有对其加密的方式进行说明,遂进行了总结DbFlow可以通过加入...

  • DBFlow源码分析:缓存相关

    LruCache 说到缓存,不得不提LruCache。 为什么要用缓存? 比如你是个厨师,柴米油盐酱醋茶你要经常使...

  • 目前最好用的安卓数据库,DBFlow使用详解

    1.在你使用之前,建议你先阅读一下官方文档https://agrosner.gitbooks.io/dbflow/...

  • DBFlow基础篇

    为什么使用DBFlow DBFlow,综合了 ActiveAndroid, Schematic, Ollie,Sp...

  • Android数据库框架DBFlow的使用

    DBFlow Android最好用的数据库框架——DBFLOW全面解析 DBFlow 是一个基于注解处理器开发的使...

  • DbFlow

    cardContactModels 为集合数据 DbFlow sql转化特例1 DbFlow sql转化特例2

  • Ceph 分层缓存--Tiering Cache

    原文来自Ceph官方文档:CACHE TIERING 部分摘抄自Ceph中国社区翻译文档:分级缓存 1、分层缓存介...

  • 学习HTTP状态码

    304: 未修改。客户端浏览器请求已处于缓存中的文档,并且自从该文档被缓存后,未修改此文档。客户端浏览器使用此文档...

  • DbFlow

    DbFlow的使用 配置 在自己的Application中配置 数据库的创建 版本号和名称 表的创建,至少有一个主...

网友评论

    本文标题:DBFlow文档:缓存

    本文链接:https://www.haomeiwen.com/subject/txaiettx.html