# level2cache **Repository Path**: hawkya/level2cache ## Basic Information - **Project Name**: level2cache - **Description**: 基于集中式缓存(redis)加本地缓存(caffeine/guava)实现的二级缓存springboot-starter - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2022-08-01 - **Last Updated**: 2023-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 两级缓存 #### 1.为什么不直接使用redis? 由于存储的是一些大的键值,所以读写频率高的情况下,redis带宽会带来性能瓶颈 #### 2.为什么不直接使用本地缓存? 服务集群部署时,多服务间的本地缓存同步问题 服务重启后本地缓存消失,将会对数据库造成冲击 #### 3.多服务间本地缓存如何进行同步? 可以使用redis发布订阅或者MQ消息队列来进行数据同步 #### 4.数据查询、更新、删除流程 ![img_3.png](img_3.png) ![img_1.png](img_1.png) ![img_2.png](img_2.png) #### 5.使用方法 1.Level2Cache提供了三个注解,@Level2Cacheable、@Level2CachePut、@Level2CacheEvict, 使用方式同spring提供的@Cacheable、@CachePut、@CacheEvict, 同样支持EL表达式 2.使用者需要自行实现L1、L2缓存的操作接口,L1CacheService和L2CacheService 之所以没有提供默认的实现,主要是方便使用者自主选择缓存中间件 3.需要注意的是,在实现一级缓存操作类L1CacheService时,更新和删除操作的实现,需要考虑服务是否集群化部署, 如果采用了集群化部署,则要考虑服务间本地缓存的同步问题,推荐使用redis发布订阅和MQ消息队列 4.为了防止高QPS请求环境下,可能会造成的缓存多次的无效更新,特引入了分布式锁接口DistributedLock,使用者可 自行选择实现方式。