缓存-本地缓存+分布式缓存

笔记:05、缓存&分布式锁.pdf

一.缓存使用

为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。而 db 承担数据落
盘工作。
哪些数据适合放入缓存?
 即时性、数据一致性要求不高的
 访问量大且更新频率不高的数据(读多,写少)
举例:电商类应用,商品分类,商品列表等适合缓存并加一个失效时间(根据数据更新频率
来定),后台如果发布一个商品,买家需要 5 分钟才能看到新的商品一般还是可以接受的。
在这里插入图片描述

1.代码示例

在这里插入图片描述

二、缓存分类

在这里插入图片描述
问题:
1).由于本地缓存保存在项目中。当分布式访问时,每次访问的不一定同一个缓存,会产生问题
2).修改某个应用,无法保证所有应用的数据一致

在这里插入图片描述
分布式项目使用本地缓存不合适,可以使用分布式缓存

2.分布式缓存

在这里插入图片描述
redis可以集群,数据库也可以分库、分表

### 结合本地缓存分布式缓存的实现方案 在现代应用开发中,为了兼顾性能扩展性,通常会采用本地缓存分布式缓存结合的方式。这种方式能够充分利用两者的优点:本地缓存提供极低延迟访问,而分布式缓存则解决共享数据一致性问题并突破单机内存限制。 #### 1. 架构设计原则 - **双层缓存结构**:将本地缓存作为第一级缓存,用于快速读取热点数据;分布式缓存作为第二级缓存,负责跨节点间的数据共享持久化[^1]。 - **写操作策略**:针对写入请求,需考虑如何同步更新两级缓存中的数据以保持一致。常见的做法有“先更新数据库再删除缓存”的模式[^4]。 #### 2. 技术选型建议 - 对于**本地缓存**的选择,推荐使用像 Caffeine 这样的高性能库,它特别适合处理那些需要复杂 API 支持且频繁调用的小规模数据集。 - 而对于**分布式缓存**,Redis 或 Memcached 是广泛使用的解决方案之一。它们不仅提供了理论上的无限扩容能力,还具备良好的高可用特性[^2]。 #### 3. 实现细节分析 以下是基于上述理念的一个具体实现流程: ```java public class CacheService { private final LoadingCache<String, Object> localCache; // 使用Caffeine初始化 private final RedisTemplate<String, Object> redisTemplate; public CacheService(RedisTemplate<String, Object> redisTemplate){ this.redisTemplate = redisTemplate; this.localCache = Caffeine.newBuilder() .maximumSize(5000) .expireAfterWrite(10, TimeUnit.MINUTES) .build(key -> loadFromDistributedCache(key)); } private Object loadFromDistributedCache(String key){ return redisTemplate.opsForValue().get(key); } public void putData(String key, Object value){ try{ saveToDatabase(key,value); // 将新值保存到DB invalidateLocalAndDistCache(key); // 清除旧版本记录 }catch(Exception e){ handleException(e); } } private void invalidateLocalAndDistCache(String key){ localCache.invalidate(key); redisTemplate.delete(key); } public Object getData(String key){ return Optional.ofNullable(localCache.getIfPresent(key)) .orElseGet(() -> fetchAndUpdateLocally(key)); } private Object fetchAndUpdateLocally(String key){ Object data = loadFromDistributedCache(key); if(data != null){ localCache.put(key,data); // 更新至近端高速缓冲区 } return data; } } ``` 此代码片段展示了如何利用 Java 编程语言结合 Spring Data Redis Caffeine 来管理双重层次化的缓存体系。当客户端尝试获取某条信息时,程序优先查询本地实例内的副本;如果未命中,则转而检索远程服务器上对应的实体,并将其加载回进程空间以便后续更快捷地重复利用。 #### 4. 关键注意事项 - 数据一致性保障机制至关重要,在任何情况下都应避免因网络分区或其他异常状况而导致不同机器间的视图差异过大。 - 定期监控整个系统的运行状态,及时调整配置参数比如过期时间设置等,从而优化资源利用率同时减少不必要的开销[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值