缓存设计 - 进程内缓存

一、What

将一些数据缓存在站点,或者服务的进程内,这就是进程内缓存。
可以缓存json数据、html页面、对象。
在这里插入图片描述

二、Why

  1. 速度更快,少了一次网络请求(比如请求redis)
  2. 节省内网带宽,少了一次网络请求(比如请求redis)

三、How

比如Java可以通过带锁的map来实现进程内缓存。又或者,可以使用第三方库,例如leveldb。
使用场景:

  1. 只读的数据。
  2. 极其高并发,如果透传后端压力极大的场景。例如,秒杀业务,并发量极高,需要站点层挡住流量,可以使用内存缓存。
  3. 一定程度上允许数据不一致业务。例如,有一些计数场景,运营场景,页面对数据一致性要求较低,可以考虑使用进程内页面缓存。

四、Note

Note1:进程内缓存带来了数据一致性问题(因为数据缓存在站点和服务的多个节点,数据存了多份,一致性比较难保障),怎么解决呢,有三个解决方案:

  1. 单节点通知其他节点 - 实时一致性
    在这里插入图片描述
  2. MQ通知的方式解耦 - 实时一致性
    在这里插入图片描述
  3. 定时从后端拉取数据 - 非实时一致性,最终一致性
    每个节点启动一个timer,定时从后端拉取最新的数据,更新内存缓存。
    在这里插入图片描述

Note2:另外,分层架构中有一个架构设计准则是:站点层、服务层要做到无数据无状态,这样才能任意的加节点水平扩展,数据和状态尽量存储到后端的数据存储服务,而站点与服务的进程内缓存,实际上违背了分层架构设计的无状态准则,故一般不推荐使用。除了上面第三点说的三个场景之外。

Refer

  1. https://blog.csdn.net/z50L2O08e2u4afToR9A/article/details/80809269
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值