1

什么是缓存

缓存是存储在计算机的一个原始数据的复制集。为了便于访问

为什么缓存为王

缓存无处不在

按照位置来分:客户端缓存,服务端缓存,网络中的缓存
按照部署方式来分:单机缓存,集群缓存。分布式缓存

为什么使用缓存

提高用户体验。一个成功的软件用户体验是关键

从网站架构看缓存

clipboard.png

从位置层面来看缓存

客户端缓存

页面缓存

页面缓存是将之前的渲染的页面保存为文件。用户再次访问时就可以避免网络连接。提高性能
html5支持离线缓存和本地缓存

浏览器缓存

浏览器会检查以确保副本是最新的。通过一次会话浏览器就会在硬盘上开辟一个空间来存缓存

app缓存

不搞这块。跳过

网络中的缓存

web代理缓存

常见的有正向代理,反向代理。透明代理

正向代理

客户端向代理服务器发送一个请求并指定目标服务器。代理服务器向源服务器转交请求并返回给客户端

clipboard.png
作用

  1. 访问本无法访问的服务器B。如vpn
  2. 加速访问服务器B
  3. Cache作用
  4. 隐藏访问者的行踪。代理服务器Z就是肉鸡
反向代理

客户端直接给代理服务器发送一个请求。代理服务器会判断向何处转发。并且返回给客户端

clipboard.png
作用:

  1. 隐藏原服务器。防火墙只允许代理服务器Z访问
  2. 负载均衡。不同的代理应答不同的客户
  3. 缓存作用
透明缓存

clipboard.png
透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。透明代理实践的例子就是时下很多公司使用的行为管理软件

服务端缓存

数据库缓存

拿mysql来说。mysql使用查询缓冲机制。将select语句和结果存在缓冲区。下次遇到相同select就直接从缓冲区拿数据
注:如果是写入操作很频繁的数据库。缓存会成为累赘。因为数据库更新缓存会占用大量性能

平台级缓存

具有缓存特性的框架能够帮助提高性能。比如spring的注解缓存、encache、jbosscache等

应用缓存

主要是用nosql做缓存。需要程序员自己写代码实现缓存机制。比如redis、memcached、mongodb

redis缓存

redis作为缓存应该是世界出名的。redis集群采用无中心点实现。用户根据hash算法算出对应的redis服务器。直接在redis服务器执行命令。redis集群还实现了动态加入节点,动态迁移节点。故障转移。
redis内部通过ping-pong机制彼此互联。客户只需要连接一台服务器就好。不用连接所有服务器。
为了让这个集群更加稳定。需要为每一个节点都准备slave服务器。保证服务挂了后能马上补上
如何判断一个节点是否挂掉。
如果一半以上的服务器连接某节点超时。则认为该服务器挂掉。slave服务器上
如果某个master节点和slave节点都挂了。
那么这个服务器就进入fail状态。少量不会有什么问题。如果有一半的master都挂了。集群就挂了

多级缓存

clipboard.png
请求流程。如果中途某个缓存命中直接就返回
nginx缓存-->redis缓存-->tomcat 本地缓存 -->数据库缓存-->数据库

CAP理论

  • 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
  • 分区容错性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

CAP不可能同时满足,只能满足其中两个
放弃分区容忍性
也就是允许分区。如关系型数据库,LDAP.
放弃可用性
则要求请求的强一致。如分布式事务,分布式锁
放弃一致性
高可用并且允许分区。如nosql。为了高可用,用本地数据服务。导致不一致


木木甫
494 声望23 粉丝

已工作的应届生。希望能和大家多多交流技术问题,