`
qianshangding
  • 浏览: 125228 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Memcached之缓存雪崩,缓存穿透,缓存预热,缓存算法(7)

 
阅读更多

缓存雪崩

缓存雪崩可能是因为数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。

解决思路:

1,采用加锁计数,或者使用合理的队列数量来避免缓存失效时对数据库造成太大的压力。这种办法虽然能缓解数据库的压力,但是同时又降低了系统的吞吐量。

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

3,如果是因为某台缓存服务器宕机,可以考虑做主备,比如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。


缓存穿透

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

解决思路:

1,如果查询数据库也为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库,这种办法最简单粗暴。

2,根据缓存数据Key的规则。例如我们公司是做机顶盒的,缓存数据以Mac为Key,Mac是有规则,如果不符合规则就过滤掉,这样可以过滤一部分查询。在做缓存规划的时候,Key有一定规则的话,可以采取这种办法。这种办法只能缓解一部分的压力,过滤和系统无关的查询,但是无法根治。

3,采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的BitSet中,不存在的数据将会被拦截掉,从而避免了对底层存储系统的查询压力。关于布隆过滤器,详情查看:基于BitSet的布隆过滤器(Bloom Filter)

大并发的缓存穿透会导致缓存雪崩。


缓存预热

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

解决思路:

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

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

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

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

解决思路:

1,写个程序去跑。

2,单个缓存预热框架。

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


缓存算法

FIFO算法:First in First out,先进先出。原则:一个数据最先进入缓存中,则应该最早淘汰掉。也就是说,当缓存满的时候,应当把最先进入缓存的数据给淘汰掉。
LFU算法:Least Frequently Used,最不经常使用算法。
LRU算法:Least Recently Used,近期最少使用算法。请查看:Memcached之你真正理解LRU吗(4)

LRU和LFU的区别。LFU算法是根据在一段时间里数据项被使用的次数选择出最少使用的数据项,即根据使用次数的差异来决定。而LRU是根据使用时间的差异来决定的。

分享到:
评论

相关推荐

    PHP MemCached 高级缓存应用代码

    PHP MemCached 高级缓存应用代码

    Memcached分布式缓存简介

    Memcached分布式缓存简介Memcached分布式缓存简介Memcached分布式缓存简介

    C#使用memCached实现缓存

    C#使用memCached实现缓存 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。...

    memcached 分布式缓存服务器

    memcached 分布式缓存服务器,windows版

    Memcached分布式缓存

    Memcached分布式缓存

    memcached缓存

    memcached 缓存 jar包,tomcat共享缓存可用,java开发数据库缓存也可用。

    memcached缓存使用演示

    memcached缓存使用演示小项目,缓存服务器的搭建,增删改查缓存

    Memcached分布式缓存入门

    Memcached分布式缓存入门,全面具体讲解Memcached原理,并有相关例子,是入门学习好资料.

    Memcached分布式缓存学习.doc

    Memcached分布式缓存学习

    memcached 系统缓存

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    MemCached 缓存系统配置说明

    这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键做分区存储,而这个区就是Memcached服务端的一个或者多个...

    .net memcached 分布式缓存应用类库

    .net下memcached 分布式缓存系统应用

    memcached分布式缓存数据库部署.doc

    memcached是高性能的分布式缓存服务器,用来集中缓存数据库查询结果,减少数据库访问次数来提高动态web应用的响应速度,官方网站:http://memcached.org/。

    Memcached缓存技术

    Memcached缓存技术,kye-value型,提高访问速度。并支持分布式等

    MemCached高速缓存类库Enyim.Caching.dll

    MemCached高速缓存类库Enyim.Caching.dll 自建MemCached或者链接阿里云OCS都可以使用此类库

    dot net memcached 分布式缓存应用类库

    dot net memcached 分布式缓存应用类库 本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的

    Memcached内存对象缓存

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    Memcached_缓存系统

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。

    php memcached缓存操作类

    实用缓存操作类,可根据需求实例不同的类 操作简单 实用

Global site tag (gtag.js) - Google Analytics