您的位置:首页 > 其它

缓存学习

2017-01-21 22:34 134 查看

缓存学习

缓存学习
常见的缓存设计
第一种

第二种

第三种

缓存穿透
什么是缓存穿透

如何避免缓存穿透

缓存雪崩
什么是缓存雪崩

如何避免缓存雪崩

缓存数据清理策略

缓存算法

常见的缓存设计

第一种

读操作

写操作

第二种

左边是读操作,右边是写操作。

当发生读操作时,如果没有目标没有进入缓存,或者已经失效,这个时候由缓存自己去控制区数据源读取数据并set回缓存,对使用缓存的应用是透明的,应用不用关心。

当发生写操作时,如果没在缓存,那么直接去写缓存,如果存在缓存,那么写完缓存再同步写下级存储。

这样做的有这么的一些好处,应用不再需要去关心缓存与下层存储结构的关系。大大地简化了开发。

非常容易扩展,象一些缓存数据自动回源呀,突然热点防穿透呀,都可以在上面的基础上进行开发。

上面这种方案应该友框架实现,如果缓存服务实现这种方案,耦合性太高

第三种

该方案是异步方案,第三种跟第二种非常的相似,主要区别就是不再同步写数据库,而是交给缓存定时将更新地数据写入持久存储。这也是操作系统的pageCache的算法。因为是异步刷新,意味着可以批量刷新,所以速度快得飞起,但同时也会因为断电,crush之类的造成数据的丢失,所以选择这种方式需要谨慎。

缓存穿透

什么是缓存穿透

当数据库没有该数据或者缓存数据过期失效的时候,客户端会频繁的访问后台数据,给后端服务造成压力.

如何避免缓存穿透

如果数据库没有数据,可以直接在缓存中缓存一个默认值,这种做法比较粗暴.

缓存的key要符合某种规则,如果客户端请求不符合规则就直接过滤掉请求,这样也能缓存后端服务的压力

采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的BitSet中,不存在的数据将会被拦截掉,从而避免了对底层存储系统的查询压力

缓存雪崩

什么是缓存雪崩

当缓存实效的时候或者缓存服务器重启的时候,请求会给后端服务(数据库)带来较大压力.

如何避免缓存雪崩

访问后端服务可以通过限制qps以及使用队列限流来减轻后端服务的压力.

缓存服务避免单点失效,服务A失效,客户端可以访问服务B.

分析用户的行为,尽量将数据失效的时间设置的均匀.

缓存数据清理策略

定时清理: 启动一个守护线程,定期去清楚已经过期的键值(不是全量删除,如果数据量比较大每次只会清楚一部分数据)

主动清理: 客户端在获取键值的时候,服务会判断该值是否过期,如果过期就返回给客户端null。

缓存算法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  缓存 应用