This browser does not support music or audio playback. Please play it in WeChat or another browser. Tonight,I feel close to you 孙燕姿;倉木麻衣 - The Moment
1.无处不在的缓存
缓存在计算机系统是无处不在,在CPU层面有L1-L3的Cache,在Linux中有TLB加速虚拟地址和物理地址的转换,在应用层有Redis等内存数据库缓存、在浏览器有本地缓存、 手机有本地文件缓存等等。 可见,缓存在计算机系统中有非常重要的地位,主要作用就是提高响应速度、减少磁盘读取等,本文主要讨论在高并发系统中的缓存系统。 一句话概括缓存系统在高并发系统中的地位的话,就是: 如果高并发系统是烤羊肉串,那么缓存系统就是那一撮孜然......2.高并发系统中的缓存
-
缓存系统的作用
缓存系统在高并发系统的作用巨大,没有缓存系统很难支撑C50K(或许这个值已经非常乐观了)以上的场景。
基于机械磁盘或SSD的数据库系统,读写的速度远慢于内存,因此单纯磁盘介质的数据库无法支撑高并发,你可以认为缓存就是为了保护磁盘数据库、是磁盘数据库的屏障。
-
缓存系统和数据库系统的访问
3.缓存系统的三大问题
网络上对于缓存三大问题的文章很多,提到的三个问题主要是:-
缓存雪崩 Cache Avalanche
-
缓存穿透 Cache Penetration
-
缓存击穿 Hotspot Invalid
-
缓存雪崩问题
注:图为柯南被雪崩所埋,黄金抢救期时毛利兰在寻找他的镜头(如侵权则删除)
可见雪崩确实很可怕,回到高并发系统,如果缓存系统故障,大量的请求无法从缓存完成数据请求,因此就全量汹涌冲向磁盘数据库系统,导致数据库被打死,整个系统彻底崩溃 。-
缓存雪崩解决方案
* 从原因来看主要是缓存系统不够高可用,因此提高缓存系统的稳定性和可用性十分必要,对于使用Redis作为缓存的系统而言需要使用Sentinel哨兵机制、集群化、持久化等来提高缓存系统的HA。 * 另一方面除了保证缓存系统的HA之外,服务本身也需要支持降级,可以使用奈飞的Hystrix来实现服务的熔断、降级、限流 来降低出现雪崩时的故障程度。 说白了就是别让服务彻底死掉就行,就像大雪封高速肯定彻底不能通行了,堵车就是慢一些至少可以走,如果还不清楚,回想一下每年你回乡的车票是怎么从12306抢回来的。
-
缓存穿透问题
-
缓存穿透解决方案
布隆过滤器Bloom Filter是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。
布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
维基百科-布隆过滤器
-
缓存击穿
-
缓存击穿解决方案