聊聊分布式应用中的缓存方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/J080624/article/details/86489966

在高并发分布式应用中缓存从来都是必要的,而且从来都是综合应用本地缓存和分布式缓存提高性能的。

【1】本地缓存

本地缓存即缓存和应用在同一个进程里,是基于JVM的缓存,应用生则生,应用死则亡。

常见产品有Guava、Caffeine和Ehcache。三者对比如下:

对比项 Guava Caffeine Ehcache
是否开源 Y(Google) Y(apache) Y(Terracotta)
级别 轻量 轻量 重量级
知名度 Java开发者必备 Spring5 Hibernate
缓存算法 LRU W-TinyLFU LRU、LFU FIFO
JDK版本 >=1.6 >=1.8 >=1.5
持久化支持 不支持 不支持 支持(商业)
集群解决方案 有(商业)
Spring Cache支持 不支持 支持 支持
性能监控 不带 不带 提供(JMX 页面)

【2】分布式缓存

常见的有Redis、memcached。关于二者相关知识参考博文:Redis/Memcache那些事

二者具体对比如下:
在这里插入图片描述


【3】本地缓存VS分布式缓存

对比如下:

对比项 本地缓存 分布式缓存
概念 缓存和应用在同一个进程里,是基于JVM的缓存 单独的组件与应用分离
社区成熟 非常高 非常高
性能 很高 单机 高 需要TCP协议交互
黏度 紧耦合 松耦合
适用环境 单机 单机/集群环境
高可用 应用生则生,应用亡则亡 集群抱团
应用共享 不能共享 可以共享

【4】本地缓存VS分布式缓存VS数据库

使用不同方案获取50K数据进行10次测试对比表格如下:

缓存方式 数据总量 总响应时长(毫秒) 第一次响应(毫秒) 测试次数 平均响应时长
数据库中读取 50K 83 12 10 8.3ms
分布式缓存使用redis 50K 7 0.8 10 0.7ms
本地应用缓存使用Guava 50K 0.133 0.011 10 0.013ms
本地应用缓存直接使用map 50K 0.129 0.011 10 0.0129毫秒

【5】企业缓存常见方案

① 大型互联网企业如何选择缓存

一级缓存+分布式缓存+数据库集群:
在这里插入图片描述

② 常见缓存架构

如下表所示:

层级 常见产品 缓存解决方案 缓存技术
应用层 浏览器 浏览器缓存 本地缓存 HTTP缓存协商 cookie sqlite websql
网络层 网络路由 CDN Squid等
负载层 Nginx Apache 等 动静分离 反向代理 基于Http服务器
服务层 Java应用 PHP应用 动态页面静态化
应用缓存
分布式缓存
MyBatis缓存
freemarker velocity Thymeleaf
Ehcache Guava Caffeine
Redis Memcached
MyBatis一级二级缓存
数据库 Oracle MySQL 缓冲区 Buffer Pool 数据库缓存机制

什么是SpringCache?

参考博文:
SpringBoot - Spring缓存默认配置与运行流程
SpringBoot - 缓存入门详解与注解使用实例

猜你喜欢

转载自blog.csdn.net/J080624/article/details/86489966