中文文档
什么是二级分布式缓存
二级缓存的核心思想是将一个本地缓存和一个共享的分布式缓存结合在一起。第一级是本地缓存,提供快速访问,但其数据只在单个实例上。第二级是分布式缓存,所有应用实例共享它,但访问速度相对较慢。二级分布式缓存其实已经能够满足我们工作中的绝大部分项目,所以我没有集成更多级别的。
-
本地缓存:
- Caffeine 是一个高性能、可扩展的Java 8基础的本地缓存库。它通常被用作第一级缓存。
- 特点:
- 基于大小、引用、到期等策略的驱逐策略。
- 可以与
LoadingCache
或AsyncLoadingCache
结合使用,使得在缓存未命中时自动加载数据。
-
共享的分布式缓存:
- Redis是一个分布式的键值存储,通常作为第二级缓存。
- 特点:
- 自动配置和连接Redis。
- 提供
RedisTemplate
和StringRedisTemplate
进行操作。
- Redisson 是一个在Redis上实现的Java内存数据网格。除了常规的Redis操作外,它还为Java的各种集合、锁、信号量等提供了分布式版本。
- 这些库可以在读取数据时提供分布式锁功能,确保在更新第二级缓存时的一致性和原子性。
-
序列化和反序列化:
- Jackson 是一个用于处理JSON的Java库。在缓存结构中,它通常用于序列化和反序列化对象,以便存储到或从Redis中检索。
二级缓存的典型工作流程
- 当请求某个数据时,首先检查第一级缓存(Caffeine)。
- 如果在第一级缓存中找到数据,直接返回。
- 如果在第一级缓存中未找到数据,检查第二级缓存(Redis)。
- 如果在第二级缓存中找到数据,将其也存入第一级缓存,然后返回数据。
- 如果两级缓存都未命中,从数据源(如数据库)获取数据,然后将数据存入两级缓存。
- 在写入或更新数据时,首先更新数据源,然后使两级缓存中的相关数据失效或更新。
在使用二级缓存时,需要考虑数据的一致性、过期策略、锁策略等因素,以确保数据的正确性和系统的高可用性。