0
点赞
收藏
分享

微信扫一扫

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

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

【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】企业缓存常见方案

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

一级缓存+分布式缓存+数据库集群:
聊聊分布式应用中的缓存方案(一)_SpringCache_02

② 常见缓存架构

如下表所示:

层级

常见产品

缓存解决方案

缓存技术

应用层

浏览器

浏览器缓存 本地缓存

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 - 缓存入门详解与注解使用实例

举报

相关推荐

0 条评论