2019独角兽企业重金招聘Python工程师标准>>>

不时有人来询问 J2Cache 里的 Region 到底是什么概念,这里做统一的解答。

J2Cache 的 Region 来源于 Ehcache 的 Region 概念。

一般我们在使用像 Redis、Caffeine、Guava Cache 时都没有 Region 这样的概念,特别是 Redis 是一个大哈希表,更没有这个概念。

在实际的缓存场景中,不同的数据会有不同的 TTL 策略,例如有些缓存数据可以永不失效,而有些缓存我们希望是 30 分钟的有效期,有些是 60 分钟等不同的失效时间策略。在 Redis 我们可以针对不同的 key 设置不同的 TTL 时间。但是一般的 Java 内存缓存框架(如 Ehcache、Caffeine、Guava Cache 等),它没法为每一个 key 设置不同 TTL,因为这样管理起来会非常复杂,而且会检查缓存数据是否失效时性能极差。所以一般内存缓存框架会把一组相同 TTL 策略的缓存数据放在一起进行管理。

J2Cache 的 Region 概念对应关系如下所示:

Ehcache region
Caffeine Cache
Guava Cache Cache

像 Caffeine 和 Guava Cache 在存放缓存数据时需要先构建一个 Cache 实例,设定好缓存的时间策略,如下代码所示:

Caffeine<Object, Object> caffeine = Caffeine.newBuilder();
caffeine = caffeine.maximumSize(size).expireAfterWrite(expire, TimeUnit.SECONDS);
Cache<String, Object> theCache = caffeine.build();

这时候你才可以往 theCache 写入缓存数据,而不能再单独针对某一个 key 设定不同的 TTL 时间。

而 Redis 可以让你非常随意的给不同的 key 设置不同的 TTL。

J2Cache 是内存缓存和 Redis 这类集中式缓存的一个桥梁,因此它只能是兼容两者的特性。

J2Cache 默认使用 Caffeine 作为一级缓存,其配置文件位于 caffeine.properties 中。一个基本使用场景如下:

#########################################
# Caffeine configuration
# [name] = size, xxxx[s|m|h|d]
#########################################default = 1000, 30m
users = 2000, 10m
blogs = 5000, 1h

上面的配置定义了三个缓存 Region ,分别是:

  1. 默认缓存,大小是 1000 个对象,TTL 是 30 分钟
  2. users 缓存,大小是 2000 个对象,TTL 是 10 分钟
  3. blogs 缓存,大小是 5000 个对象,TTL 是 1 个小时

例如我们可以用 users 来存放用户对象的缓存,用 blogs 来存放博客对象缓存,两种的 TTL 是不同的。

而 default 是当我们调用如下方法时:

public void set(String region, String key, Object value)

如果我们传入的 region 参数(假设为:region1)没有在 caffeine.properties 中定义的话,那 J2Cache 会自动创建一个名为 region1 的缓存 Region,其配置和 default 的配置一致。

所以要用好缓存首先要确保以下几点:

  1. 根据业务规划好不同的 region 来存放不同的缓存数据
  2. 根据实际情况确定每个 region 的缓存数据数量和 TTL 时间
  3. 尽量必要未经定义直接使用一个全新的 region (避免使用 default 数据)

更多关于 J2Cache 的介绍请看 https://gitee.com/ld/J2Cache

转载于:https://my.oschina.net/javayou/blog/3031773

J2Cache 两级缓存中的 Region 到底是什么东西?相关推荐

  1. j2cache两级缓存框架

    j2cache介绍 j2cache是OSChina目前正在使用的两级缓存框架. j2cache的两级缓存结构: L1: 进程内缓存 caffeine/ehcache L2: 集中式缓存 Redis/M ...

  2. J2cache两级缓存原理

    1.关于开源中国的一些数据 2.OSChina的几种缓存策略 3.Ehcache缓存架构 4.实际运行存在的问题 5.混村系统选型时的考量 6.J2Cache--两级缓存框架(内存,磁盘) 每天 IP ...

  3. 高性能两级缓存J2Cache

    今天给大家推荐一个开源项目,J2Cache,一个很完善的两级缓存项目,作者是-红薯(开源中国CTO) 介绍 开源项目地址:https://gitee.com/ld/J2Cache/tree/maste ...

  4. java l1 l2缓存,Java 两级缓存框架

    概述介绍 J2Cache 是 OSChina 目前正在使用的两级缓存框架(要求至少 Java 8).第一级缓存使用内存(同时支持 Ehcache 2.x.Ehcache 3.x 和 Caffeine) ...

  5. SpringBoot 集成 layering-cache 实现两级缓存调研与实践

    前言 对于系统查多改少的数据,可以通过缓存来提升系统的访问性能.一般情况下我们会采用 Redis ,但是如果仅仅依赖 Redis 很容易出现缓存雪崩的情况.为了防止缓存雪崩可以通过 Redis 高可用 ...

  6. Springboot+caffeine 实现两级缓存

    目录: 缓存.两级缓存 spring cache:主要包含spring cache定义的接口方法说明和注解中的属性说明 spring boot + spring cache caffeine简介 sp ...

  7. 【Caffeine进阶】Redis+Caffeine 两级缓存实战,性能爆缸

    往期回顾 博主前面发过一篇[缓存框架Caffeine]初级篇,主要介绍了Caffeine的入门级使用!地址https://blog.csdn.net/Number_oneEngineer/articl ...

  8. Redis+Caffeine两级缓存

    1.前言 在高性能的服务架构设计中,缓存是一个不可或缺的环节.在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库.在提升 ...

  9. 两级放大器中消零电阻Rz的计算问题

    一.消零电阻的由来 在两级放大器中,如果按照最初的频率补偿方法单纯增大第二级放大器的gm使其远离Wu,这会使得功耗大大增加.因为在前面说到我们事先已经分配好了前后两级所要负责的增益,进而确定gm/id ...

最新文章

  1. 硬盘由于io设备错误无法运行此项请求_移动硬盘坏了真倒霉,祸不单行U盘也坏了,数据怎么存储才安全?...
  2. 《博客园精华集》Sharepoint+MOSS分册
  3. 敏捷大观园 - 视频分享第6弹!
  4. P1412-经营与开发【dp】
  5. stm32c语言设计以及注释,13个基于STM32的经典项目设计实例,全套资料~-嵌入式系统-与非网...
  6. php cgi模块,PHP5模块和CGI
  7. 女孩子怎样能赚到月薪一万
  8. 时间轴 纵向_高考最新硬货!高中历史时间轴(文字版)高能来袭,背会就能多拿分!...
  9. android连接指定的wifi
  10. JavaScript常用DOM操作方法和函数
  11. MySQL索引结构--由 B-/B+树看
  12. 机器学习基石——作业2解答
  13. 官方最新linux版idea工具ideaIU-2020.1.1.tar.gz
  14. 项目管理常用的七大工具
  15. js行结尾,是否必须写分号
  16. HLS directive
  17. 5-2. 已有的小车实现samba文件共享
  18. 粒子物理中的粒子鉴别
  19. Android Studio 设置打开layout.xml文件的默认视图
  20. vue的两个核心是什么

热门文章

  1. 如何解决log4j打印日志出现中文乱码
  2. Python学习笔记之入门基础
  3. 深入理解深度学习——预训练模型
  4. SiTime硅晶振解决方案--低轨卫星通信
  5. Label smooth
  6. python将签名自动插入到PDF文件(PyPDF2)
  7. Docker系列(二): 搭建docker镜像仓库-Nexus、Harbor
  8. 2022-2028年全球与中国巨磁电阻基器件(GMR)行业深度分析
  9. 解决XP安装SP3后添加/删除windows组件无法打开问题
  10. 自行车测速器怎么调_自行车测速、测距仪原来是这么玩的