缓存知识点
Posted benjious
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存知识点相关的知识,希望对你有一定的参考价值。
概述
酷壳关于缓存的文章中提到 先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。 这一点主要是因为并发而导致的,我们来看一下还有那些方式更好地处理缓存。
缓冲四种模式
Cache Aside
- 失效:应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中。
- 命中:应用程序从cache中取数据,取到后返回。
- 更新:先把数据存到数据库中,成功后,再让缓存失效。
ReadThrough
Read Through 和上面大致相同,不同的是失效后,客户端“从数据库中取数据,成功后,放到缓存中”这步操作由服务器来完成,
Write Through
Write Through 则是当更新数据时,先去缓冲中找是否有该数据,没有则直接更新数据库,然后返回。如果该数据存在缓存,则更新缓存,然后再由Cache自己更新数据库(这是一个同步操作)。图例如下 :
Write Behind Caching
Write Behind 又叫 Write Back 。和我们的操作系统中的磁盘加载到内存,然后对数据进行更改的方式相同,将某个 page 标识为 dirty (脏页),当一定的时候进行回刷。
缓存一致性
缓存和持久化数据是否一致。
缓存穿透
缓存穿透的场景是查询一个根本不存在的数据,缓存不存在,数据库也不存在,这种情况下缓存没什么作用,当请求量大的时候,所有的请求都到了数据库,假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库。 解决的方法
- 将不存在的数据也存到缓存中去,设置失效时间短点
- 布隆过滤器,相关知识将参考资料
缓存雪崩
缓存雪崩,是指在某一个时间段,缓存集中过期失效。 例如以下的例子
- 双十一当晚某商城某些热卖商品加载进缓存,1点活动结束,缓存失效,之后的请求全部不命中,数据库查询陡增。
- 缓存服务器某个节点宕机或断网。 解决方案 :
- 设置较长的过期时间
缓存击穿
缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。 例如某个电商项目,某个商品成为“爆款”。
热点数据集中失效
参考资料
- https://coolshell.cn/articles/17416.html
- https://www.jianshu.com/p/2104d11ee0a2
- https://hackernoon.com/probabilistic-data-structures-bloom-filter-5374112a7832
以上是关于缓存知识点的主要内容,如果未能解决你的问题,请参考以下文章