# cache-spring-boot-starter **Repository Path**: csnz/cache-spring-boot-starter ## Basic Information - **Project Name**: cache-spring-boot-starter - **Description**: 一个自定义的缓存组件库,支持分布式缓存、多级缓存(使用 caffeine 作为 L1,redis 为 L2)。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-06-29 - **Last Updated**: 2024-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 缓存组件库 cache-spring-boot-starter ### 组件概述 1、分布式缓存 2、一级缓存 L1 caffeine JVM 级别内存 3、二级缓存 L2 redis 分布式内存 4、bloom 过滤器 ### QA #### 1、为什么引入多级缓存? 虽然我们一般业务系统(毕竟业务量有限)不会遇到在随着 data-size 的增大和数据结构的复杂的造成性能下降,但网络 IO 消耗会成为整个调用链路中不可忽视的部分。尤其在 微服务架构中,一次调用往往会涉及多次调用 #### 2、为什么要自己构建多级缓存? Caffeine 来自未来的本地内存缓存,性能比如常见的内存缓存实现性能高很多。 目前大部分应用缓存都是基于 Spring Cache 实现,基于注释(annotation)的缓存(cache)技术,存在的问题如下: - Spring Cache 仅支持 单一的缓存来源,即:只能选择 Redis 实现或者 Caffeine 实现,并不能同时使用。 - 数据一致性:各层缓存之间的数据一致性问题,如应用层缓存和分布式缓存之前的数据一致性问题。 - 缓存过期:Spring Cache 不支持主动的过期策略 综合所述:构建 L1 Caffeine JVM 级别内存 , L2 Redis 内存 #### 3、如何解决缓存一致性? 利用了redis的pubsub功能,主动告知被缓存的信息有更新,广播到所有节点。 某种意义上说,它只是缩小不一致时间窗口的一个方式(有网络延迟且不保证一定完成) #### 4、合适的场景 适合用在写少读多WORM(Write-Once-Read-Many)的场景。