二、Memcached缓存穿透、缓存雪崩

二、Memcached缓存穿透、缓存雪崩

1、 缓存雪崩 可能是数据魏加载到缓存中,或者缓存同一时间大面积失效,导致大量请求去数据库查询的过程,数据库过载,崩溃。

解决方法: 1 采用加锁计数,使用合理的队列数量来避免缓存失效时对数据库造成很大的压力,限制去数据库查询数量,降低了系统吞吐量。

 2 分析用户行为,尽量让失效时间点分布均匀,避免缓存雪崩发生。

 3 如果是某台服务器宕机,可采用主备。

2、 缓存穿透 缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库中查询。

     解决方法: 1 如果查询数据库也是空,直接设置一个默认值,放入缓存,设置一个短的生存时间,下次查询的时候,就直接从缓存中获得。

      2 过滤掉不符合规则的对象,适用于缓存对象有规律的时候。

      3 对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃

3、缓存预热

单机web系统情况下比较简单。

解决思路:

1,直接写个缓存刷新页面,上线时手工操作下。

2,数据量不大,可以在WEB系统启动的时候加载。

3,搞个定时器定时刷新缓存,或者由用户触发都行。

分布式缓存系统,如MemcachedRedis,比如缓存系统比较大,由十几台甚至几十台机器组成,这样预热会复杂一些。

解决思路:

1,写个程序去跑。

2,单个缓存预热框架。

缓存预热的目标就是在系统上线前,将数据加载到缓存中

猜你喜欢

转载自www.cnblogs.com/newboys/p/9067875.html
今日推荐