只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼·罗兰
1 Nginx/CDN
静态数据利用CDN或者Nginx解决 动态数据利用分布式缓存redis等解决
2 缓存读写策略
2.1 Cache Aside(旁路缓存)策略
在更新数据的时候先更新DB,在删除缓存(想想为什么)。插入直接存储到DB,这样查询的时候先查询缓存,缓存没有,再从db查询出来set到缓存,然后返回。
- 优点:缓存仅仅保存被请求的数据,属于懒加载模式(Lazy Loading),避免了任何数据都被写入缓存造成缓存频繁的更新。
- 缺点:当发生缓存未命中的情况时,则会比较慢,因为要经过三个步骤:查询缓存,从数据库读取,写入缓存。
2.2 Read/Write Through策略
用户只与缓存打交道,由缓存和数据库通信,写入或者读取数据。读缓存,没有,缓存会查询db然后设置到缓存在返回。更新缓存,有就更新,缓存同步更新到db。插入缓存更简单,直接插入db(write miss的情况分两种写策略:要么直接写入db,要么写入缓存,再有缓存更新到db)。
- 优点:缓存不存在脏数据;相比较Cache-Aside懒加载模式,读取速度更高,因为较少因为缓存未命中而从数据库中查找
- 缺点:对于总是写入却很少被读取的应用,那么Write-Through会非常浪费性能,因为数据可能更改了很多次,却没有被读取,白白的每次都写入缓存造成写入延迟。
2.3 Write Back策略
又叫做Write-Behind。和Write-Through写入的时机不同,Write-Back将缓存作为可靠的数据源,每次都只写入缓存,而写入数据库则采用异步的方式,比如当数据要被移除出缓存的时候再存储到数据库或者一段时间之后批量更新数据库。操作系统中比较常见。
- 优点:写入和读取数据都非常的快,因为都是从缓存中直接读取和写入;对于数据库不可用的情况有一定的容忍度,即使数据库暂时不可用,系统也整体可用,当数据库之后恢复的时候,再将数据写入数据库。
- 缺点:有数据丢失的风险,如果缓存挂掉而数据没有及时写到数据库中,那么缓存中的有些数据将永久的丢失了。
3 缓存高可用方案
- 客户端方案;
- 中间代理方案(codis);
- 服务端方案(redis哨兵);
4 缓存穿透
- 回种空值
- 布隆过滤器
5 CDN加速静态资源访问
- DNS技术
- GSLB是核心解决CDN的利剑
6 关注公众号
微信公众号:堆栈future