好记忆不如烂笔头, 能记下点什么, 就记下点什么, 方便后期的巩固 . . .
前言
缓存的使用,可以更好的服务于我们的系统,让用户有一个很好的体验。
描述
正常情况下,使用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消耗,所以最好的方式是存储在本地的缓存中,同时增加机器的内存,以提供更加良好的服务。
目前想到的就是这些,欢迎提出更好的建议!