缓存的基本知识

在整个计算机体系构造中(无论是硬件层面还是软件层面),缓存都是无处不在的。

在计算机硬件构造中,由于两种介质的速度不匹配,高速介质在和低速介质交互时速度趋向低速方,这就导致了高速介质的资源闲置。而通过引入第三种介质(速度和成本介于两者中间),将低速方读写的部分内容数据保存在该介质中,高速方大多数情况下则无需和低速方直接交互,这样就能整体提升了交互的性能。这就是计算机体系中缓存的由来。比较典型的就是CPU缓存(CPU寄存器=>L1 cahce =>L2 cache =>内存=>硬盘),如图:

在计算机系统和应用软件层面,缓存更是无处不在。我们在使用浏览器上网时,很多静态资源会被缓存到本地。我们在手机上采用微信聊天时,很多好友的头像等数据会被缓存到手机中。在操作系统层面,I/O操作也会被内核缓存(一般将数据缓存在文件系统的缓存页中),当然,这个可能相比前两个场景更加抽象,但缓存的目的都是一致的,为了提升读写性能。

缓存在狭义上解决介质读写速度不匹配问题,广义上包括任何利用中间媒介提高速度的方法,包括:空间换时间,动态操作变为静态操作。

缓存(CACHE)和缓冲(BUFFER)

缓存:可以共享,多种数据,大小不固定,可以重复使用,已知数据,用于提高IO效率。

缓冲:不可以共享,单一数据,大小固定,读取后失效,命中100%,未知数据,用于减少IO次数。

缓存的属性

命中率:从缓存中返回正确数据的次数/总请求次数。

容量:超过这个值启用一定的策略:转移到磁盘;转移到远端;清空部分。

存储介质:内存、磁盘。

成本:开发成本、部署成本、硬件成本。

效率:SET效率、GET效率、序列化、哈希算法、分布式算法。

缓存的限制

由于价格的因素,缓存实现依赖的存储往往有大小限制——保存什么,舍弃什么,命中率。

缓存往往是从无到有的——在最初阶段不能发挥作用,在不命中的时候性能颠簸。

缓存的分类

按照存储介质来分 :

内存(网站进程内、同服务器独立进程、独立服务器、分布式服务器组)。

磁盘(本地文件和数据库,独立服务器、分布式服务器组)。

缓存可以使用磁盘而不仅仅是内存。

按照存储的数据来分 :

直接用于输出的整页(HTML、脚本样式、图片)。

片段页(可供多个客户端使用的HTML、脚本样式等)。

索引和聚合数据(空间换时间)。

耗时查询的结果数据。

和业务相关的大块数据(列表数据,引用数据)。

和业务相关的小级数据(行级数据,资源数据)。

和上下文(用户)相关的数据(活动数据)。

按照实现方式来分 :

框架或引擎内置的缓存(比如ORM缓存和SQL SERVER缓存)。

安装特定的组件根据规则自动实现缓存(比如反向代理和输出缓存)。

需要由开发以编程方式实现的缓存(比如业务数据缓存)。

按照作用来分 :

用于数据的读取(之后介绍的大部分内容都是基于此类缓存)

用于(允许丢失)数据的写入——写到缓存的队列中,再由工作线程提交处理(写入存储)

网站架构中的缓存

浏览器缓存(HTTP缓存头)

代理缓存(Squid Vanish CDN)

Web服务器缓存(内核缓存、应用缓存)

页面输出缓存(片段缓存、整页缓存)

业务数据缓存(本地缓存,分布式缓存)

其它缓存(ORM、数据库、搜索引擎等缓存)

缓存的常见模式和策略(过期、更新、清除)

缓存的常见模式:

缓存的策略:

缓存的更新策略

A 由获取数据请求触发的被动更新

B 由更新数据请求触发的主动更新(双写)

C 使用独立线程主动定时更新缓存

D 回调方式更新(过期或依赖)

E 永远不更新?

缓存的过期(失效)策略

F 绝对的过期时间

G 平滑过期(有人使用就不会过期)

H 依赖方式(依赖数据库、依赖文件)

I 永远不过期?

缓存的清除(替换)策略:

RAND 删除随机数据,不能反映局部性。

SIZE 删除最大的数据。

FIFO,First In First Out 删除最先进入缓存的数据,不能反映局部性。

LFU,Least Frequently Used 删除一直以来最少被使用的数据。

LRU,Least Recently Used 删除最近最少使用的数据。

常见模式

延迟加载方式:A+F

预加载方式:B/C/E+I

原文地址:http://www.cnblogs.com/dinglang/p/6108185.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

缓存在大型网站架构中的应用相关推荐

  1. 大型网站架构系列:缓存在分布式系统中的应用(二)

    缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题.提供高性能的数据快速访问. 本文是缓存在分布式应用第二篇文章,介绍分布式缓存,Memcache,Redis,本地缓存 ...

  2. 一文讲透大型网站架构模式核心原理与案例分析

    什么是模式?每一个模式描述了一个在我们周围不断发生的问题及该问题解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复的工作. 也许互联网产品不是随便复制就能成功的,创新的产品更能为用户创造价 ...

  3. 大型网站技术架构-2. 大型网站架构模式

    分层 分层是企业应用中最常见的一种架构模式,将系统在横向维度上切分为几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统. 在大型网站架构中也采用分层结构, ...

  4. 纵观大型网站架构发展,总结持久化部分需要应对的问题

    纵观大型网站架构发展,总结持久化部分需要应对的问题 系统的性能瓶颈 数据安全性 性能与成本 1.主要解决针对大型网站架构中持久化部分中,大量数据存储以及高并发访问所带来是数据读写问题.分布式是将一个业 ...

  5. 大型网站架构演变和知识体系

    存爱好,作为收藏,原地址:http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html ,同时向原创致敬 之前也有一些介绍大型网站架构 ...

  6. 读《大型网站技术架构:核心原理与案例分析》第一章:大型网站架构演化

    写在前面 从开始写代码到现在,已经做了好几个项目了,BS和CS的都有,一直都以一个码农自居.但,作为一个进步的程序员,都有一个成为架构师的理想.于是,在平时的工作中,也积极的去看各种书籍,看园子里面的 ...

  7. 大型网站架构的发展演变过程

    大型网站架构的发展演变过程 原文地址 什么是大型网站 如何定义一个网站是不是大型网站,一般我们会从两个纬度去考衡,访问量以及数据量,二者缺一不可. 我们以javaweb为例,来搭建一个简单的电商系统, ...

  8. 大型网站架构演化历程

    http://www.hollischuang.com/archives/728 本文内容大部分来自<大型网站技术架构>,这本书很值得一看,强烈推荐. 大型网站系统的特点 高并发,大流量 ...

  9. 大型网站架构演变和知识体系--转

    之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的.ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不 ...

最新文章

  1. UML 中extend和include的区别
  2. php有几种数据结构,PHP数据结构有几种_后端开发
  3. 兼容浏览器的布局CSS
  4. PIL修改带有透明像素的png图片颜色
  5. linux 安装apache resin,Linux下安装resin+apache+jdk+php+mysql(gd)全过程(二)
  6. 令牌环 典型例题分析解答
  7. winform 企业ERP管理系统源码 c# C/S
  8. 有什么简单办法从格式复杂的 Excel中提取数据
  9. 【Eclipse】eclipse在文件夹下可以打开,桌面快捷方式报错
  10. 三十岁左右的你,现在收入多少?
  11. 移动铁通宽带上网设置教程
  12. 在html中如何做SEO优化
  13. Java调用 新浪微博API 接口发微博(包含js微博组件、springMVC新浪登录)详解
  14. R实现K-means
  15. 2015061710 - 海豹突击队的忠告
  16. knex简单的增删改查
  17. Opencv(C++)笔记--模板匹配cv::matchTemplate()和最值计算cv::minMaxLoc()
  18. 什么是闭包,对闭包的理解,闭包的用途及优缺点
  19. Linux驱动之 原子操作
  20. 关于公文计算机考试的题目,2015计算机等级考试模拟题

热门文章

  1. log4net日志插件的使用
  2. zabbix JMX监控 tomcat
  3. (转)前置++和后置++的区别
  4. 如何提高自己的工作效率
  5. 【Silverlight5矢量打印】如何用C#代码检测打印机和驱动是否支持PostScript
  6. AspNetCore在docker部署时遇到一个小坑
  7. 315曝光不良奸商 对企业不能罚酒三杯
  8. Xamarin.Forms 5.0 来了
  9. C# Span 源码解读和应用实践
  10. 初识ABP vNext(2):ABP启动模板