优化缓存架构思考

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/supingemail/article/details/86538721

好记忆不如烂笔头, 能记下点什么, 就记下点什么, 方便后期的巩固 . . . 

前言

     缓存的使用,可以更好的服务于我们的系统,让用户有一个很好的体验。

描述

正常情况下,使用redis , redis cluster,还是memcached 都可以达到我们的要求,但是:

在高并发的情况下,如果保证我们的缓存服务起作用并且能够支撑起大QPS 而不会导致机器宕机,不能提供服务呢?

我以常用的 Redis 为例,主要可以采取以下方式来进行处理。

解决方案

1. 缓存扩容

          主要是指将redis 所在机器的内存提升,加内存条和调节redis 的配置参数,来扩大内存存储以及相应,

这种主要是存在于单机使用。

 

2. 缓存熔断器

          这种主要是指master-slave 或者集群的redis部署情况下,设置 "熔断限流",当QPS达到一定的量之后,

自动限制访问,将流量转到其他redis实例上去。

 

3.增加本地缓存

          本地缓存可以选择hashmap,guava的CacheBuilder,Ehcache 等等,将常用的热数据,放入到本地的缓存中来,以提高系统的访问量和抗住高并发的情况。

 

总结

       其实,缓存高并发,主要体现在热key大value 上,

热key :是指一直都被访问的数据 ,当然也指某个时间段最爱被用户点击和访问的数据;

一直都被访问的数据 很好处理,基本上是一次性处理好,以后都基本没问题。

但是突然之间被放大量访问的数据,则是比较头疼的事情,需要在开发中时刻注意,提前处理好相应的逻辑和应对之策。

 

大value:是指某个key对应的value可能有GB级的大小,导致查询value的时候导致网络相关的故障问题。

这样的数据,存放在redis服务器会有io消耗,所以最好的方式是存储在本地的缓存中,同时增加机器的内存,以提供更加良好的服务。

 

       目前想到的就是这些,欢迎提出更好的建议!

 

 

 

 

 

 

 

没有更多推荐了,返回首页