缓存概述
缓存的分类
CDN缓存
CDN缓存是什么
CDN(Content Delivery Network内容分发网络)的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中。
在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
CDN缓存应用场景
主要缓存静态资源,例如图片,视频。
CDN缓存应用如下图:
CDN缓存优点如下图:
反向代理缓存
反向代理缓存是什么
反向代理位于应用服务器机房,处理所有对Web服务器的请求。
如果用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。
如果没有缓冲则先向Web服务器发出请求,取回数据,本地缓存后再发送给用户。通过降低向 Web 服务器的请求数,从而降低了 Web 服务器的负载。
反向代理缓存应用场景
一般只缓存体积较小静态文件资源,如css、js、图片。
反向代理缓存应用如下图:
反向代理缓存开源实现如下图:
本地应用缓存
本地应用缓存是什么
指的是在应用中的缓存组件,其最大的优点是应用和Cache是在同一个进程内部,请求缓存非常快速,没有过多的网络开销等。
在单应用不需要集群支持或者集群情况下各节点无需互相通知的场景下使用本地缓存较合适。
同时,它的缺点也是应为缓存跟应用程序耦合,多个应用程序无法直接的共享缓存,各应用或集群的各节点都需要维护自己的单独缓存,对内存是一种浪费。
本地应用缓存应用场景
缓存字典等常用数据。
本地应用缓存介质如下图所示:
编程直接实现如下图:
Ehcache
基本介绍:Ehcache是一种基于标准的开源缓存,可提高性能,卸载数据库并简化可伸缩性。
它是使用最广泛的基于Java的缓存,因为它功能强大,经过验证,功能齐全,并与其他流行的库和框架集成。
Ehcache可以从进程内缓存扩展到使用 TB 级缓存的混合进程内/进程外部署。
Ehcache应用场景如下图:
Ehcache的架构如下图:
EHcache特点
(1)通过少量的配置annotation注释即可使得既有代码支持缓存
(2)支持开箱即用Out-Of-The-Box,即不用安装和部署额外第三方组件即可使用缓存
(3)支持Spring Express Language,能使用对象的任何属性或者方法来定义缓存的 key 和 condition
(4)支持AspectJ,并通过其实现任何方法的缓存支持
(5)支持自定义key和自定义缓存管理者,具有相当的灵活性和扩展性
Ehcache的主要特征如下图:
Ehcache缓存数据过期策略如下图:
Ehcache过期数据淘汰机制:即懒淘汰机制,每次往缓存放入数据的时候,都会存一个时间,在读取的时候要和设置的时间做 TTL 比较来判断是否过期。
Guava Cache
基本介绍:Guava Cache是 Google 开源的 Java 重用工具集库 Guava 里的一款缓存工具。
Guava Cache特点与功能如下图:
Guava Cache的应用场景如下图:
Guava Cache的数据结构如下图:
Guava Cache的缓存更新策略如下图:
Guava Cache的缓存回收策略如下图:
分布式缓存
分布式缓存是什么
指的是与应用分离的缓存组件或服务,其最大的优点是自身就是一个独立的应用,与本地应用隔离,多个应用可直接的共享缓存。
分布式缓存的主要应用场景如下图:
分布式缓存的主要接入方式如下图:
Memcached
Memcached是一个高性能,分布式内存对象缓存系统,通过在内存里维护一个统一的巨大的 Hash 表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
Memcached的特点如下图:
Memcached的基本架构如下图:
缓存数据过期策略:LRU(最近最少使用)到期失效策略,在 Memcached 内存储数据项时,可以指定它在缓存的失效时间,默认为永久。
当Memcached服务器用完分配的内存时,失效的数据被首先替换,然后是最近未使用的数据。
数据淘汰内部实现:懒淘汰机制为每次往缓存放入数据的时候,都会存一个时间,在读取的时候要和设置的时间做TTL比较来判断是否过期。
分布式集群实现:服务端并没有“ 分布式 ” 功能。每个服务器都是完全独立和隔离的服务。Memcached 的分布式,是由客户端程序实现的。
Redis
Redis是一个远程内存数据库(非关系型数据库),性能强劲,具有复制特性以及解决问题而生的独一无二的数据模型。
它可以存储键值对与5种不同类型的值之间的映射,可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能。
Redis还可以使用客户端分片来扩展写性能,内置了 复制(replication),LUA 脚本(Lua scripting),LRU 驱动事件(LRU eviction),事务(transactions) 和不同级别的磁盘持久化(persistence)。
并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(High Availability)。
Redis的数据模型如下图:
Redis的数据淘汰策略如下图:
Redis的数据淘汰内部实现如下图:
Redis的持久化方式如下图:
Redis底层实现部分解析如下图:
Redis的缓存设计原则如下图所示:
Redis与 Memcached 的比较如下图:
分层缓存架构设计总结
网友评论