多级缓存设计

多级缓存设计

整理一下实际工程中用到过的一些缓存,从客户端到服务端。

1. 客户端缓存

页面缓存

- HTML5中使用本地缓存localStorage
- 开启离线缓存步骤:1. 准备资源列表清单文件;2. 页面中添加manifest属性,指定缓存清单文件的路径

浏览器缓存

- 浏览器与服务器约定的规则

APP上的缓存

-  APP可以将内容缓存在内存、文件或本地数据库中
-  数据库缓存方法:存放文件相关信息(URL、路径、下载时间、过期时间),需要注意清理机制。
-  IOS开发中,SDWebImage-图片缓存框架

2. CDN

  • 将图片、JS、音频等放在CDN上,能提高访问速度、降低成本、也提高了系统的吞吐量。笔者就遇到过一次因为某个活动页面的图片链接没有替换成CND链接,用了应用内链接,上线直接冲垮网站的情况。

CDN方案

  • 国内很多CDN厂商
  • Amazon CloudFront,不过看了下cn区的还没有这个服务。

3. 接入层缓存,Nginx

  • Nginx能有效地直接处理静态内容,适合给前端服务器当缓存。

Nginx 缓存配置

  1. 在http配置快中添加proxy_cache_path,配置缓存所在文件系统路径、缓存区名称、大小。
  2. 配置proxy_cache
  • 一个简单的中文参考: https://leokongwq.github.io/2016/11/25/nginx-cache.html

4. 应用层缓存

4.1 堆内缓存

  • Guava cache, 简单易用
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

private final LoadingCache<String, Product> productCache = CacheBuilder.newBuilder()
        .softValues()
        .expireAfterWrite(TimeUtils.FIVE_MINUTE_IN_SECONDS, TimeUnit.SECONDS)
        .build(
                new CacheLoader<String, Product>() {
                    @Override
                    public Product load(String productId) throws Exception {
                        return productDao.getByProductId(productId);
                    }
                }
        );

4.2 堆外缓存

Ehcache的 BigMemory

4.3 本地磁盘缓存

local redis cache

4.4 分布式缓存

Redis
  • 需要学习的内容有很多,包括常用命令、数据结构、主从复制、持久化、高可用、集群、扩容、内存管理、集群监控等
Memcached
  • 包括 安装使用、内存管理、缓存策略、分布式集群、分布式算法等

5. 数据库缓存

MySQL查询缓存

查看 Query Cache 是否合理
    - SHOW VARIABLES LIKE '%query_cache%' 
    - SHOW STATUS LIKE '%cache%'
InnoDB 缓存性能
    - SHOW VARIABLES LIKE '%innodb_buffer_pool%' 
    - SHOW STATUS LIKE '%innodb_buffer_pool_read%'
    - 缓存命中率: (Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads)/Innodb_buffer_pool_read_requests*100%
    - 根据命中率调节innodb_buffer_pool_size

大型网站的系统架构示意图

前端页面缓存
    → Web服务器集群
        → 分布式文件系统
        → 动态页面组件缓存
        → 数据库接入层 → 数据库集群
        → 数据缓存、分布式缓存
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值