欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

华为架构师与你一起探索高并发缓存架构(有示例代码)

程序员文章站 2023-12-23 12:42:34
对于高并发的系统,所有的请求都打在数据库上是不明智的选择。一般的做法是通过缓存来缓解数据库的压力。缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。最主要的就是要考虑到缓存的穿透性和数据一致性问题。先来看一个示例:这是一个简单应用缓存的示例,存在以下几个问题:1:高并发的情况下,大部分请求会直接访问数据库。多线程的情况下,缓存还没及时写入,就会有大部分请求直接访问数据库。2:业务逻辑与缓存之间解耦性太高。先来解决第一个问题。就是利用锁的机制。但是要考虑加锁的地方,加的不对会.....

华为架构师与你一起探索高并发缓存架构(有示例代码)

对于高并发的系统,所有的请求都打在数据库上是不明智的选择。一般的做法是通过缓存来缓解数据库的压力。缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。最主要的就是要考虑到缓存的穿透性和数据一致性问题。

先来看一个示例:

华为架构师与你一起探索高并发缓存架构(有示例代码)

这是一个简单应用缓存的示例,存在以下几个问题:

1:高并发的情况下,大部分请求会直接访问数据库。多线程的情况下,缓存还没及时写入,就会有大部分请求直接访问数据库。

2:业务逻辑与缓存之间解耦性太高。

先来解决第一个问题。就是利用锁的机制。但是要考虑加锁的地方,加的不对会导致性能问题,比如不能加到整个方法上。

华为架构师与你一起探索高并发缓存架构(有示例代码)

接下来解决第二个问题,这就是解耦问题,让别的人也可以轻松使用这个缓存方法。那就是使用模板设计模式,做一个缓存模板。

华为架构师与你一起探索高并发缓存架构(有示例代码)

调用方式:

华为架构师与你一起探索高并发缓存架构(有示例代码)

目前为止,是一个相对比较完美的方案了。

但是作为架构师,眼界还需要再开阔一下,那就是需要实现一个更加方便的架构供更多的人灵活调用。给大家提示一下,借鉴Spring cache的思想使用AOP + Annotation等技术实现缓存与业务逻辑的解耦。

大概的流程如下:

1 . 获取到拦截方法的 @Cache 注解,并生成缓存 key;

2 . 通过缓存 key,去缓存中获取数据;

3 . 如果缓存命中,执行如下流程:

  • 如果需要自动加载,则把相关信息保存到自动加载队列中;

  • 否则判断缓存是否即将过期,如果即将过期,则会发起异步刷新;

  • 最后把数据返回给用户。

4 . 如果缓存没有命中,执行如下流程:

  • 选举出一个 leader 回到数据源中去加载数据,加载到数据后通知其它请求从内存中获取数据(拿来主义机制);

  • leader 负责把数据写入缓存;如果需要自动加载,则把相关信息保存到自动加载队列中;

  • 最后把数据返回给用户。

华为架构师与你一起探索高并发缓存架构(有示例代码)

 

本文地址:https://blog.csdn.net/python8989/article/details/107487863

上一篇:

下一篇: