缓存机制

缓存 缓存就是数据交换的缓冲区(称作Cache)

客户端:缓存(expires)、deflate压缩
缓存服务器:CDN/cache缓存静态内容如:html、jpg、gif、js等
静态web服务器:Apache/nginx静态服务器提供html页面内容
php、java 服务器:PHP/JAVA动态内容
数据库缓存服务器:数据库缓存memcache/redis
数据库服务器:MYSQL数据库
数据存储:NFS/HADOOP等

 

缓存工作的原则,就是 “引用的局部性”,这可以分为时间局部性和空间局部性。

CPU 缓存、网络缓存、磁盘缓存、数据缓存、WEB缓存等。

web 应用缓存场景  

访问一个地址 从浏览器缓存 路由缓存 DNS缓存 递归搜索 web缓存 数据缓存

一、HTTP 缓存:

1、HTTP 协议 超文本传输协议 

HTTP 报文就是浏览器和服务器间通信时发送及响应的数据块。
浏览器向服务器请求数据,发送请求(request)报文;服务器向浏览器返回数据,返回响应(response)报文。
报文信息主要分为两部分:
  A、包含属性的首部(header) 附加信息(cookie,缓存信息等)与缓存相关的规则信息,均包含在header中;
  B、包含数据的主体部分(body) HTTP请求真正想要传输的部分;

HTTP 缓存有多种规则,Expires ;通过web 服务器实现缓存机制。

Apache 缓存

mod_cache 模块

Apache 的缓存方式也有两种,一种是基于硬盘文件的缓存,由 mod_disk_cache 实现,另一种是使用内存缓存,由 mod_mem_cache 实现。URL 的请求方式必须是 GET 方式。

  基于硬盘文件存储的缓存 :

<IfModule mod_cache.c>CacheDefaultExpire 86400<IfModule mod_disk_cache.c>CacheEnable disk /tmp/fileCacheRoot /tmp/apacheCacheCacheDirLevels 5CacheDirLength 4CacheMaxFileSize 1048576CacheMinFileSize 10</IfModule>
</IfModule>

CacheDefaultExpire:设定缓存过期的时间(秒),默认是1小时,只有当缓存的文档没有设置过期时间或最后修改时间时这个指令才会生效.
CacheEnable:启用缓存,第1个参数是缓存类弄,这里当然是 disk了,第2个参数是缓存路径,指的是 url 路径,这里是缓存所有的东西.
CacheRoot:缓存文件所在的目录,运行 Apache 的用户(如daemon 或 nobody)要能对其进行读写,如果不清楚的话可以直接设置成 777,请手动建立该目录并设置好访问权限
CacheDirLevels:缓存目录的深度,默认是3,这里设置为5
CacheDirLength:缓存目录名的字符长度,默认是4,这里设置为5
CacheMaxFileSize 和 CacheMaxFileSize: 缓存文件的最大值和最小值(byte),当超过这个范围时将不再缓存,这里设置为 1M 和 10bytes

  基于内存的缓存

<IfModule mod_cache.c><IfModule mod_mem_cache.c>CacheEnable mem /MCacheMaxObjectCount 20000MCacheMaxObjectSize 1048576MCacheMaxStreamingBuffer 65536MCacheMinObjectSize 10MCacheRemovalAlgorithm GDSFMCacheSize 131072</IfModule>
</IfModule>

CacheEnable:启用缓存,使用基于内存的方式存储
MCacheMaxObjectCount:在内存中最多能存储缓存对象的个数,默认是1009,这里设置为20000
MCacheMaxObjectSize:单个缓存对象最大为 1M,默认是10000bytes
MCacheMaxStreamingBuffer:在缓冲区最多能够放置多少的将要被缓存对象的尺寸,这里设置为 65536,该值通常小于100000或 MCacheMaxObjectSize 设置的值
MCacheMinObjectSize:单个缓存对象最小为10bytes,默认为1bytes
MCacheRemovalAlgorithm:清除缓存所使用的算法,默认是 GDSF,还有一个是LRU,可参考 Apache 的官方文档。
MCacheSize:缓存数据最多能使用的内存,单位是 kb,默认是100kb,这里设置为128M

Nginx 调优 配置cache 缓存  常见的 304 状态

proxy_temp_path  /tmp/proxy_temp_dir;//  设置缓存位置
proxy_cache_path /tmp/proxy_cache_dir   levels = 1:2 keys_zone = cache_one:200m inactive =1d    max_size =30g;//  设置缓存区名称  内存缓存空间大小  1天内容没有访问自动清除 缓存设置大小 ;

Tomcat性能调优

开启压缩功能
compression="on"

通过ExpiresFilter设置资源缓存,可通过Expires 与 Cache-Control 控制资源何时过期。

    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletResponse res = (HttpServletResponse) response;  res.setHeader("Cache-Control", "max-age=10");                   // 第一次请求10s后过期}

二、应用场景方式缓存分类有三大类

  A、数据库缓存

  B、静态缓存

  C、动态缓存

一、数据库缓存:

  1、MongoDB:是文档型的非关系型数据库,使用bson结构。其优势在于查询功能比较强大,能存储海量数据,缺点是比较消耗内存。使用os mmap机制缓存数据文件 所以会耗尽系统资源所有内存。

方案:集群多副本集;

应用:一般用来存放评论等半结构化数据,支持二级索引。 适合存储json类型数据,不经常变化。用于对象及JSON数据的存储:Mongo 的BSON 数据格式非常适合文档化格式的存储及查询。

场景: 资讯 新闻;

  2、Redis:内存 缓存技术 主要规则是 key-value存储系统;支持备份;还支持list,set,sorted set,hash 等众多数据结构。Redis使用单线程的IO复用模型,和Memcached类似,但它支持存储的value类型相对更多支持不同的排序 算法;可以将内存中的数据保持在磁盘中。

方案:一般主从模式,3.0之后集群哨兵模式;或者twemproxy部署简单快捷;可以直接在proxy进行读写、并转发请求给后端的redis;但是不适合超大流量系统。

应用:适合小数据文件 当数据不能剔除,数据需要落地时,redis更合适 类似用户信息文件;

  3、Memcache:都是基于内存缓存技术 关系型数据缓存。

方案:也是分布式集群

原理:Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,Memcached 用一致性哈希环的方式,在客户端计算出分布位置。

应用:memacached基本上只支持kv存储,不支持枚举,持久化和复制等功能;

场景:视频信息资料 100K大数据文件;内存利用率比较高。

  4、消息队列 

 

二、静态缓存

1、客户端缓存

浏览器缓存,也就是客户端缓存;一般是在 web 服务器上配置;

  应用:

a、常见的nginx 的 expires 设置一个时间缓存;请求常见的 304 状态;请求未改动。

b、jsp 文件html 标签 expires

 

3、服务器端的静态缓存

服务器端也是主要分为磁盘缓存和内存缓存两大类;

1、Squid

squid 代理服务器; 

场景应用:缓存静态页面和html 文件 图片 流媒体 等 ;(一般会禁止CGI 缓存)会缓存到内存和硬盘中;

a、透明代理 也是正向代理 不需要设置客户端 只设置网关服务器设置;

b、反向代理 结合智能DNS 实现的基本的CDN( 内容分发网络)框架;

squid 主要负责提供缓存加速以及访问控制;正向代理是对用户的一种代理操作。正向代理缓存 应用内部网络希望访问外部网络时缓存页面数据。

2、Varnish
varish是以内存作为共享容器的:内存缓存;内存的大小决定了它的缓存容量。相对于主要以硬盘为存储的squid来说要高效的多。它适合一些经常查询且变化不大的静态内容缓存。

Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程;master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。

3、CDN  内容分发网络

尽可能的避开互联网上有可能影响数据传输的速度和稳定性的环节和瓶颈,导向离客户最近的服务点。解决网络拥挤,提高响应速度。

CDN 是属于静态缓存加速。

CDN 是基于传统 nginx、squid、varnish 等 web 缓存技术,结合 DNS 智能解析的静态缓存加速技术。

CDN 的静态缓存技术核心主要在于两点:

节点缓存:对需要加速的网站应用,相应的静态资源通过内存缓存+磁盘缓存的方式缓存在服务器端。

精准调度:对访问的用户 ip 进行智能解析调度,实现就近缓存节点访问。

4、数据库 mysql 一主多从或者多主多从。

5、磁盘存储;raid ;分布式文件系统 nfs mfs hadoop dhfs

 

三、缓存 回收策略机制

1、基于空间
达到一定存储空间 按照策略移除数据。

2、基于容量
缓存条目限制 超过将旧的数据移除

3、基于时间
TTL 活存期限 设置一个时间段
TTI 空闲期 数据多久没有没有访问将从缓存中移除。

转载于:https://www.cnblogs.com/sharesdk/p/9305793.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shell学习总结

Shell 是什么&#xff1f; Shell 是一个用C语言编写的程序&#xff0c;它是用户使用Linux的桥梁。Shell既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服务…

java有几个关键字,Java多线程常用的几个关键字

Java多线程常用的几个关键字二、volatile作用&#xff1a;volatile关键字的作用是&#xff1a;使变量在多个线程间可见(具有可见性)&#xff0c;但是仅靠volatile是不能保证线程的安全性&#xff0c;volatile关键字不具备synchronized关键字的原子性。Demo1:package com.ietree…

PHP获取QQ等级,php仿QQ等级太阳显示函数

开头先引述下QQ等级的算法&#xff1a;设当前等级为N&#xff0c;达到当前等级最少需要的活跃天数为D&#xff0c;当前活跃天数为Dc&#xff0c;升级剩余天数为Dr&#xff0c;则&#xff1a;从而推出:好了&#xff0c;引述完成&#xff0c;懒得写字了&#xff0c;贴出代码&…

Bugfree实用心得_转

转自&#xff1a;http://blog.csdn.net/benkaoya/article/details/8719257 本博下有许多实用技巧 1. 什么是问题跟踪系统 问题跟踪系统&#xff08;Issue Tracking System&#xff09;是专门用于记录、跟踪和管理各类问题的软件。 问题跟踪系统出现于上世纪80年代&#xff0c;…

【qxbt day1】 P2367 语文成绩

今天学了 差分********* 很明白 然后 配合着luogu上的题写一下吧 裸的差分 当时一直打暴力60分 交了十几次 今天才知道 查询修改什么的是差分 直接看题把 输入输出格式输入格式&#xff1a; 第一行有两个整数n&#xff0c;p&#xff0c;代表学生数与增加分数的次…

python会什么比c慢

众所周知&#xff0c;python执行速度比c慢。原因为何&#xff1f; 先来看下面这张图&#xff1a; python的传统运行执行模式&#xff1a;录入的源代码转换为字节码&#xff0c;之后字节码在python虚拟机中运行。代码自动被编译&#xff0c;之后再解释成机器码在CPU中执行。 补充…

多维动归第一题

https://www.luogu.org/problemnew/show/P1508 好了这题就是较为简单的坐标类DP&#xff08;感觉&#xff09;&#xff0c;总之是一个二维的区域&#xff0c;需要一步一步地向可前进方向dp&#xff0c;而倒退过来&#xff0c;就是每一个地方取之前的地方里最多的一个进行选择&a…

Json字符串处理

2019独角兽企业重金招聘Python工程师标准>>> pom.xml <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.7</version> </dependency> 编写GsonUtils类 // // Source c…

用脚本控制虚拟机

#############用脚本控制虚拟机给file.sh 一个权限chmod x file.sh转载于:https://blog.51cto.com/forever8/1863587

HDU 5288

//枚举因子&#xff0c;查找和i最近的左右是i因子的点即可。#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define LL long long using namespace std;const int MAX100010; const LL mod1e97; int l_next[10010];…

Git 初步学习

学习目标&#xff1a; 在linux 上安装Git 服务器 在windows 上安装 Git 客户端 创建Git仓库&#xff0c;git用户 在windows 中获取项目&#xff0c;对项目进行增删改查&#xff0c;更新到服务器 创建两个分支&#xff0c;进行分支修改和代码合并 1. 在linux上安装git服务器 使用…

CRTMPServer 在CentOS 64-bit下的编译(转)

CRTMPServer 在CentOS 64-bit下的编译 http://blog.csdn.net/qiuchangyong/article/details/52848942 一、Centos 用 wget 下载需要的软件 wget http://www.cmake.org/files/v2.8/cmake-2.8.6.tar.gz 二、安装 cmake tar zxvf cmake-2.8.4.tar.gzcd cmake-2.8.6./bootstrapgma…

HTML 学习笔记 day one

HTML学习笔记 day one Chapter one 网站开发基础 1.2网站的基本架构 网站的基本要素&#xff1a;内容&#xff0c;页面&#xff0c;超链接 动态网页和静态网页的区别在于&#xff1a;动态网页会自动更新&#xff0c;后缀名是.asp或者.aspx;而静态网页不会自动更新&#xff0c…

Jquery事件冒泡

事件冒泡 什么是事件冒泡 在一个对象上触发某类事件&#xff08;比如单击onclick事件&#xff09;&#xff0c;如果此对象定义了此事件的处理程序&#xff0c;那么此事件就会调用这个处理程序&#xff0c;如果没有定义此事件处理程序或者事件返回true&#xff0c;那么这个事件会…

WPF对某控件添加右键属性

代码创建右键属性 ContextMenu cm new ContextMenu();MenuItem mi new MenuItem();mi.Header "打开此文件所有文件夹";mi.Click mi_Click;cm.Items.Add(mi);lv.ContextMenu cm; 转载于:https://www.cnblogs.com/lunawzh/p/5986356.html

解决虚拟机 正在决定eht0 的ip信息失败 无链接-- 添加虚拟网卡

添加步骤&#xff1a;1、进入设备管理器 2、点下一步3、继续下一步4、继续往下走转载于:https://www.cnblogs.com/Yongzhouunknown/p/4802530.html

jquery元素节点操作

jquery元素节点操作 创建节点 var $div $(<div>); var $div2 $(<div>这是一个div元素</div>); 插入节点 1、append()和appendTo()&#xff1a;在现存元素的内部&#xff0c;从后面插入元素 var $span $(<span>这是一个span元素</span>); $(#d…

8位二进制补码表示整数的最小值是什么,最大值是什么

最大127,最小 -128补码表示的数,是没有正负0的,因此除了最高位的符号位以外,可以表示的数最大为 127,因此最大为 127 而因为 10000000,并不是表示为 -0 因此人家用 1000000表示 -128转载于:https://www.cnblogs.com/huenchao/p/5988288.html

使用 Arduino 和 LM35 温度传感器监测温度

上一篇玩儿了一下Arduino入门&#xff0c;这次再进一步&#xff0c;用一下LM35温度传感器来监测当前温度。LM35温度传感器已经在Arduino入门套件里包含了&#xff0c;就是那个有三个脚的小黑块儿。 我们先把这些东西连起来。把传感器查在面包板上&#xff0c;然后按照下面的示意…

快照是什么?揭秘存储快照的实现

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文由许登博 发表于云社区专栏 原创声明&#xff1a;本文首发腾讯云云社区&#xff0c;未经允许&#xff0c;不得转载 前言 存储网络行业协会SNIA&#xff08;StorageNetworking Industry Association&…