Java缓存之JetCache

  • 写在前面
    • 为什么使用缓存
    • 使用场景
  • 简介
  • 特性
  • 缓存类型-两级缓存
    • 本地缓存
    • 远程(访问Redis的客户端)
  • 区别
    • Spring Cache:
    • JetCache
  • 常用注解
    • @Cached
    • @CacheInvalidate
    • @CacheUpdate
    • @CreateCache
    • @CacheRefresh

写在前面

为什么使用缓存

在高并发、大流量等场景下,降低系统延迟,缓解数据库压力,提高系统整体的性能,也能够让用户有更好的体验;

使用场景

读多写少、不追求强一致性

简介

JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作;
当前有四个实现:RedisCache、RedisLettuceCache、CaffeineCache、LinkedHashMapCache;

特性

  • 通过统一的API访问Cache系统
  • 通过注解实现声明式的方法缓存,支持TTL(超时时间,Spring Cache Redis 默认只支持配置全局的)和两级缓存
  • 通过注解创建并配置Cache实例
  • 针对所有Cache实例和方法缓存的自动统计
  • Key的生成策略和Value的序列化策略支持自定义配置
  • 分布式缓存自动刷新,分布式锁
  • 异步Cache API (使用Redis的Lettuce客户端时)

缓存类型-两级缓存

本地缓存

  • LinkedHashMap:使用LinkedHashMap做LUR方式淘汰
  • Caffeine:基于Java8开发的提供了近乎最佳命中率的高性能的缓存库
  • PS:选择了本地缓存请设置limit,全局默认设置了100,本地缓存的数据存放于内存,减轻内存的损耗,如果使用了Caffeine,缓存的key过多可能导致内存溢出

远程(访问Redis的客户端)

  • Redis:使用Jedis客户端,Redis官方首选的Java客户端
  • RedisLettuce:使用Lettuce客户端,一个高性能基于Java的Redis驱动框架,支持线程安全的同步、异步操作,底层集成了Project Reactor,提供反应式编程;
  • PS:选择了远程缓存请设置keyPrefix,保证存放至Redis的缓存key规范化,避免与其他系统出现冲突

区别

Spring Cache:

  • 优点

    • 支持开箱即用(Out Of The Box),并提供基本的Cache抽象,方便切换各种底层Cache
    • 通过Cache注解即可实现缓存逻辑透明化,让开发者关注业务逻辑
    • 当事务回滚时,缓存也会自动回滚
    • 支持比较复杂的缓存逻辑
    • 提供缓存编程的一致性抽象,方便代码维护
  • 缺点

    • Spring Cache并不针对多进程的应用环境进行专门的处理;
    • Spring Cache抽象的操作中没有锁的概念,当多线程并发操作(更新或者删除)同一个缓存项时,有可能读取到过期的数据
    • 无法满足本地缓存和远程缓存同时使用,使用远程缓存时无法自动刷新

JetCache

  • 优点

    • 远程缓存和内存型缓存可以共存,当共存时,优先访问内存,保护远程缓存;也可以只用某一种;
    • 自动刷新策略,防止某个缓存失效,访问量突然增大时,所有机器都去访问数据库,可能导致数据库挂掉
    • 利用不严格的分布式锁,对同一key,全局只有一台机器自动刷新
  • 缺点:
    • JetCache通过Spring AOP生成代理,来支持缓存功能

常用注解

@Cached

  • @Cached:是在接口方法或者类方法上添加缓存,一般以参数为key,以返回值为value存入缓存中
    可配置cacheType参数:REMOTE, LOCAL, BOTH
    LOCAL时可配置localLimit参数来设置本地local缓存的数量限制,condition参数可配置在什么情况下使用缓存,condition和key支持SPEL语法;
  • @CreateCache是直接创建一个缓存实例,然后调用put(T key, T value)、get(T key)等方法实现缓存
  • Cache实例的默认超时时间,通过在@CreateCache和@Cached上的expire属性指定,如果没有指定,则使用yml中定义的全局配置

@CacheInvalidate

@CacheInvalidate:缓存失效,同样可配置condition满足的情况下失效缓存,但不能支持是在方法调用前还是调用后将缓存失效;

@CacheUpdate

@CacheUpdate:缓存更新,value为缓存更新后的值,此操作是调用原方法结束后将更新缓存

@CreateCache

@CreateCache:用于字段上的注解,创建缓存,根据参数,创建一个name的缓存,可以全局显式使用这个缓存参数对象

@CacheRefresh

@CacheRefresh:自动刷新策略,可设置refresh、stopRefreshAfterLastAccess、refreshLockTimeout参数;

更多详细配置说明介绍,可仔细查看文档:https://github.com/alibaba/jetcache/wiki/MethodCache_CN

【Java】- 缓存之JetCache基础篇相关推荐

  1. Java程序设计语言(基础篇)机械工业出版社 原属第10版

    链接:https://pan.baidu.com/s/1txoB3sk0SdT1u8RpS2x-Kg  提取码:rxkd  Java程序设计语言(基础篇)机械工业出版社 原属第10版 外加一本Java ...

  2. [转载] JAVA语言程序设计(基础篇)第十版课后题答案(第一章)

    参考链接: Java中的Scanner和nextChar() JAVA语言程序设计(基础篇)第十版课后题答案 第一章 第二题 /** Created by ysy on 2018/7/6. */ pu ...

  3. java语言程序设计基础篇课后答案_《Java语言程序设计:基础篇》课后复习题答案-第十五章.pdf...

    <Java语言程序设计:基础篇>课后复习题答案-第十五章 Chapter15Graphics 1. Theycoordinateshouldincreaseandthexcoordinat ...

  4. Java学习---Day16_IO流基础篇

    Java学习-Day16_IO流基础篇 文件操作 操作磁盘上的某一个文件或某一个文件夹,可以对他们进行创建或删除.移动.属性获取.属性设置等操作.但是,不包含读取文件的内容.拷贝文件 ps:java中 ...

  5. Java学习笔记之基础篇

    Java学习笔记之基础篇 目录 Java如何体现平台的无关性? 面向对象(OO)的理解 面向对象和面向过程编程的区别 面向对象三大特征 静态绑定和动态绑定(后期绑定) 延伸:类之间的关系 组合(聚合) ...

  6. invader的java学习第一天基础篇

    invader的java学习第一天基础篇 一.java主要历史 ①java是Sun公司的产品,09年被Oracle公司收购. ②java语言之父:詹姆士高斯林 二.jdk.jre.jvm三者关系 jd ...

  7. invader的java学习第二天基础篇

    invader的java学习第二天基础篇 一.深入了解第一个Hello World程序 public class Hello World{ public static void main(String ...

  8. JAVA学习之路--基础篇三

    目录 关于Java中从键盘输入的语句 nextxxx().next().nextLine()的区别 语句 if和if else语句 Switch语句 for语句 while和do..while bre ...

  9. java综合知识点总结基础篇

    一.JDK常用的包 java.lang: 这个是系统的基础类,比如String.Math.Integer.System和Thread,提供常用功能. java.io: 这里面是所有输入输出有关的类,比 ...

最新文章

  1. C++中拷贝控制操作(三/五法则)
  2. idea 更改自动补全返回值_整理了一些 IDEA 中比较骚的技巧
  3. 〖Linux〗Bash快捷键使用
  4. UI设计入门书籍(未整理)
  5. SQL基础【二、SQL语法】
  6. 计篇-之一文言文翻译
  7. angularjs控制器之间的数据共享与通信
  8. C++ —— C++程序编译的四个过程
  9. tree命令的使用(过滤文件夹)
  10. WCF在安全性方面的支持(1):一些概念
  11. Git笔记(18) 搭建服务器Git
  12. 计算机主机内有哪些部件常用的,智慧职教: 计算机系统由什么组成?计算机主机内有哪些部件?常用的计算机外设有哪些...
  13. 美团关联公司公开“无人车及无人配送系统”相关专利
  14. JavaScript:instanceof 实现原理
  15. guava-Retryer失败重试
  16. 主从同步redis和mysql的区别_mysql主从复制、redis基础、持久化和主从复制
  17. C#控制BarTender自动打印(方法一)
  18. php网站后台修改主页,织梦网站后台主页页面修改
  19. Nginx源码阅读:ngx_palloc 内存池
  20. 后端每天更新微信用户用户头像

热门文章

  1. HSB/HSL 滤镜
  2. 在页面添加天气预报显示
  3. High Dynamic Range(HDR)图像介绍(一)
  4. 利用手机访问电脑上开发的html页面
  5. html网页如何在手机上观看,电脑的html怎么在手机观看
  6. 安徽大学本科毕业论文答辩和论文选题PPT模板
  7. SQL Server Group by
  8. 磁敏感定量成像技术的基本方法和临床应用
  9. android 实现微信分享
  10. JVM之 方法区、永久代(PermGen space)、元空间(Metaspace)三者的区别