# jetcache **Repository Path**: vip55/jetcache ## Basic Information - **Project Name**: jetcache - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-01-09 - **Last Updated**: 2024-04-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README JetCache 源码分析 ===================================== [![Build Status](https://travis-ci.org/alibaba/jetcache.svg?branch=master)](https://travis-ci.org/alibaba/jetcache) [![Coverage Status](https://coveralls.io/repos/github/alibaba/jetcache/badge.svg?branch=master)](https://coveralls.io/github/alibaba/jetcache?branch=master) [![GitHub release](https://img.shields.io/github/release/alibaba/jetcache.svg)](https://github.com/alibaba/jetcache/releases) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) 当前 master 分支的版本为 **2.5.x** 该工程已经对 JetCache 的大部分核心内容进行了比较详细的源码注释与分析,对应的源码分析文章可查看我的博客园[**月圆吖**](https://www.cnblogs.com/lifullmoon) [**《JetCache 缓存框架的使用以及源码分析》**](https://www.cnblogs.com/lifullmoon/p/13854158.html) 简介 --- [`JetCache`](https://github.com/alibaba/jetcache)是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了`Cache`接口用于手工缓存操作。 当前有四个实现:`RedisCache`、`RedisLettuceCache`、`CaffeineCache`、`LinkedHashMapCache`。 特性: - 通过统一的API访问Cache系统 - 通过注解实现声明式的方法缓存,支持TTL和两级缓存 - 通过注解创建并配置`Cache`实例 - 针对所有`Cache`实例和方法缓存的自动统计 - Key的生成策略和Value的序列化策略支持自定义配置 - 分布式缓存自动刷新,分布式锁 - 异步Cache API (使用Redis的Lettuce客户端时) 缓存类型: - 本地 `LinkedHashMap`:使用LinkedHashMap做LUR方式淘汰 [`Caffeine`](https://github.com/ben-manes/caffeine):基于Java8开发的提供了近乎最佳命中率的高性能的缓存库 - 远程(访问Redis的客户端) `Redis`:使用Jedis客户端,Redis官方首选的Java客户端 `RedisSpringData`:使用SpringData访问Redis(官网未作介绍) [`RedisLettuce`](https://github.com/lettuce-io/lettuce-core):使用Lettuce客户端,一个高性能基于Java的Redis驱动框架,支持线程安全的同步、异步操作,底层集成了[Project Reactor](https://projectreactor.io/),提供反应式编程,参考:[Redis高级客户端Lettuce详解](https://www.cnblogs.com/throwable/p/11601538.html) ### 为什么使用缓存? 在高并发、大流量等场景下,降低系统延迟,缓解数据库压力,提高系统整体的性能,让用户有更好的体验。 ### 使用场景 读多写少、不追求强一致性、请求入参不易变化 ### 使用规范 选择了远程缓存请设置keyPrefix,保证存放至Redis的缓存key规范化,避免与其他系统出现冲突,例如这样设计:`系统简称:所属名字:`,这样存储到Redis的缓存key为:`系统简称:所属名字:缓存key` 选择了本地缓存请设置limit,全局默认设置了100,本地缓存的数据存放于内存,减轻内存的损耗,如果使用了Caffeine,缓存的key过多可能导致内存溢出 请勿滥用缓存注解,对于非必要添加缓存的方法我们尽量不使用缓存