HBase-1.2.4 CombinedBlockCache和InclusiveCombinedBlockCache

简介: 一、综述        在《HBase-1.2.4 Allow block cache to be external分析》一文的最后,讲解了如何实例化外部缓存MemcachedBlockCache。

一、综述

        在《HBase-1.2.4 Allow block cache to be external分析》一文的最后,讲解了如何实例化外部缓存MemcachedBlockCache。本文将对上文中提到的几种缓存中的InclusiveCombinedBlockCache和CombinedBlockCache做个综述。

        上文中提到的缓存实现,有以下几种:

        1、单独LruBlockCache

        2、启用外部缓存:InclusiveCombinedBlockCache

        3、启用混合缓存CombinedBlockCache

二、CombinedBlockCache

        CombinedBlockCache是一个混合缓存,它是由LruBlockCache和另外一种BlockCache实现的。它的cacheBlock()方法,会根据参数inMemory和cacheDataInL1来确定缓存的地址是LruBlockCache还是另外一种BlockCache,如下:

  @Override
  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory,
      final boolean cacheDataInL1) {
    boolean isMetaBlock = buf.getBlockType().getCategory() != BlockCategory.DATA;
    if (isMetaBlock || cacheDataInL1) {
      lruCache.cacheBlock(cacheKey, buf, inMemory, cacheDataInL1);
    } else {
      l2Cache.cacheBlock(cacheKey, buf, inMemory, false);
    }
  }
       而获取缓存时,则是先从LruBlockCache中获取,获取不到时再从另外一种BlockCache中获取,如下:

  @Override
  public Cacheable getBlock(BlockCacheKey cacheKey, boolean caching,
      boolean repeat, boolean updateCacheMetrics) {
    // TODO: is there a hole here, or just awkwardness since in the lruCache getBlock
    // we end up calling l2Cache.getBlock.
    if (lruCache.containsBlock(cacheKey)) {
      return lruCache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);
    }
    Cacheable result = l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);

    return result;
  }
        回收缓存亦是如此,如下:

  @Override
  public boolean evictBlock(BlockCacheKey cacheKey) {
    return lruCache.evictBlock(cacheKey) || l2Cache.evictBlock(cacheKey);
  }

三、InclusiveCombinedBlockCache

        InclusiveCombinedBlockCache是外部缓存的集中体现,它继承自CombinedBlockCache,但是对于缓存及其获取做了特别的声明,如下:

        1、获取缓存时从lruCache中获取,因为启用外部缓存时会同时写入lru和外部缓存,并且,lru有一种机制,即存在victimHandler且!repeat的情况下,会尝试从另外一种缓存中获取;

        2、缓存时则是lruCache和l2Cache同时缓存。

相关文章
Online Judge System 中术语含义: OJ、AC、WA、TLE、OLE、MLE、PE、RE、CE
Online Judge System 中术语含义: OJ、AC、WA、TLE、OLE、MLE、PE、RE、CE
4307 0
Online Judge System 中术语含义: OJ、AC、WA、TLE、OLE、MLE、PE、RE、CE
|
10月前
|
人工智能 编解码 算法
ENEL:3D建模革命!上海AI Lab黑科技砍掉编码器,7B模型性能吊打13B巨头
ENEL是由上海AI Lab推出的无编码器3D大型多模态模型,能够在多个3D任务中实现高效语义编码和几何结构理解,如3D对象分类、字幕生成和视觉问答。
257 9
ENEL:3D建模革命!上海AI Lab黑科技砍掉编码器,7B模型性能吊打13B巨头
|
存储 数据安全/隐私保护 虚拟化
真人出镜的录屏软件,上手非常简单!文末有福利!
但,真的不要再来找不坑老师要camtasia的安装包了,它已经被国内某公司代理,四处投诉、发律师函呢!想要使用只能购买了!我已经多年不用这软件了。
522 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的私房菜定制上门服务系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的私房菜定制上门服务系统附带文章源码部署视频讲解等
234 0
|
SQL NoSQL 前端开发
SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
1843 2
SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
开发者说:Sentinel 流控功能在 SpringMVC/SpringBoot 上的实践
从用户的视角来感受一个开源项目的成长,是我们推出「开发者说」专栏的初衷,即在开发者进行开源项目选型时,提供更为立体的项目信息。专栏所有内容均来自作者原创/投稿,本文是「开发者说」的第6篇,作者 Jason Joo,@友乐活(北京),Sentinel Committer.
24722 89
|
SQL 移动开发 开发框架
1小时入门天猫精灵有屏音箱语音技能开发
本文将教你在天猫精灵上怎么开发技能或者应用。文中使用PHP的知名框架:Laravel,只需1小时帮你入门天猫精灵有屏技能开发。支持语音交互。欢迎大家转发,分享,文末还有源码共享,欢迎大家下载。
1小时入门天猫精灵有屏音箱语音技能开发
|
API Android开发
激活Shizuku
激活Shizuku
2857 0
云通信智能语音服务-工作手机号使用FAQ
工作手机号是具备APP注册、语音通话、上网、点对点短信等功能的手机号码,含实体SIM卡。“工作手机号”面向企业客户提供一站式通信、办理、 维护和结算能力,支持企业管理注销、变更和付费、员工使用等众多客户实际业务场景。
4773 0
云通信智能语音服务-工作手机号使用FAQ