缓存+mysql优化.docx

上传人:b****6 文档编号:7694379 上传时间:2023-05-11 格式:DOCX 页数:76 大小:2.54MB
下载 相关 举报
缓存+mysql优化.docx_第1页
第1页 / 共76页
缓存+mysql优化.docx_第2页
第2页 / 共76页
缓存+mysql优化.docx_第3页
第3页 / 共76页
缓存+mysql优化.docx_第4页
第4页 / 共76页
缓存+mysql优化.docx_第5页
第5页 / 共76页
缓存+mysql优化.docx_第6页
第6页 / 共76页
缓存+mysql优化.docx_第7页
第7页 / 共76页
缓存+mysql优化.docx_第8页
第8页 / 共76页
缓存+mysql优化.docx_第9页
第9页 / 共76页
缓存+mysql优化.docx_第10页
第10页 / 共76页
缓存+mysql优化.docx_第11页
第11页 / 共76页
缓存+mysql优化.docx_第12页
第12页 / 共76页
缓存+mysql优化.docx_第13页
第13页 / 共76页
缓存+mysql优化.docx_第14页
第14页 / 共76页
缓存+mysql优化.docx_第15页
第15页 / 共76页
缓存+mysql优化.docx_第16页
第16页 / 共76页
缓存+mysql优化.docx_第17页
第17页 / 共76页
缓存+mysql优化.docx_第18页
第18页 / 共76页
缓存+mysql优化.docx_第19页
第19页 / 共76页
缓存+mysql优化.docx_第20页
第20页 / 共76页
亲,该文档总共76页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

缓存+mysql优化.docx

《缓存+mysql优化.docx》由会员分享,可在线阅读,更多相关《缓存+mysql优化.docx(76页珍藏版)》请在冰点文库上搜索。

缓存+mysql优化.docx

缓存+mysql优化

目录

一、大型网站的主要参数1

二、大型网站带来的问题2

三、高的并发量如何解决2

四、解决大的流量问题3

1、减少http请求3

2、配置缓存,4

3、配置压缩,减少数据传输的数据量。

8

4、把比较占用流量的一些资源单独部署服务器。

11

五、大存储的解决方案11

1、使用服务器端的缓存技术,目的是减少或不查数据库11

2、数据库方面的优化。

12

六、页面静态化之真静态12

1、页面静态化的分类12

2、实现方式:

12

3、ob缓存的讲解12

4、ob缓存对应的函数,13

5、真静态典型案例:

17

6、真静态案例扩展19

7、TP框架如何使用真静态。

20

8、真静态的优缺点说明:

21

七、页面静态化之伪静态21

1、原理说明:

22

2、开启重写模块。

22

3、完成一个入门案例:

22

4、配置的语法:

24

一、大型网站的主要参数

pv值(pageviews)网站的浏览量

一个网站的所有页面,在一天24小时内被访问的总的次数。

达到千万级别,百万级别。

uv值(uniquevistor)独立访客

一个网站,在一天24小时内,有多少个用户来访问我们的网站。

百万级别,几十万级别以上。

独立ip

一个网站,在一天24小时内,有多少个独立ip来访问我们的网站。

百万级别,几十万级别以上。

如果要考虑局域网,则uv值略大于独立ip的。

二、大型网站带来的问题

高的并发量:

一个网站,在同一时间点(1秒内)有多少人同时访问网站的某一个页面。

500*3600*10=

大的带宽(流量):

流量变大。

数据存储海量级别:

数据表的容量达到,GT级别。

要求,要快速的查找需要的数据。

三、高的并发量如何解决

服务器架构,采用分层架构,采用负载均衡来处理,

负载均衡的策略:

轮询技术:

负载均衡把请求轮流转发给web服务器。

最少连接:

负载均衡把请求转发给最空闲的web服务器。

ip哈希:

同一地址的客户端,始终请求同一台web服务器。

负载均衡器:

硬件:

F5-BiGIP特点:

立竿见影,价格昂贵,一般大型的网游公司,实力比较大的公司再用。

软件:

需要一台普通的服务器只需安装负载均衡软件即可

lvs(linuxviturlserver)集成到内核中。

nginx(该软件可以做web服务器用,也可以做负载均衡用)

四、解决大的流量问题

1、减少http请求

主要手段就是合并(样式文件,背景图片文件,js文件),减少http请求的次数。

效果:

实际上皇冠和喇叭是在同一张图片上。

2、配置缓存,

把一些更新不是很频繁的资源,缓存到浏览器端,当浏览器下次再请求同一资源时,直接从浏览器端取出,就无需请求服务器了。

实现方式:

是通过web服务器配置来实现的。

打开apache的配置文件,httpd.conf,要开启缓存配置模块。

具体配置代码:

#开启缓存的配置

ExpiresActiveOn

#基于文件类型配置缓存的。

ExpiresByTypeimage/jpeg“accessplus30days”

语法格式:

access/now:

基于请求响应一瞬间的。

modification:

基于文件最后修改日期的。

配置案例:

测试文件代码:

配置缓存效果:

可以通过响应头信息来查看文件的类型。

也可以对某些文件不缓存,永远要请求服务器。

需要开启头模块。

在虚拟主机里面配置:

具体的效果:

总的配置代码:

3、配置压缩,减少数据传输的数据量。

查看浏览器支持的压缩格式:

在请求的头信息里面,告诉服务器,我支持哪种压缩格式。

原理:

为了提高网页在网络上的传输速度,服务器对主体信息进行压缩。

如常见的gzip压缩,deflate压缩,compress压缩以及google的chrome正在推的sdcn压缩

Apache上利用gzip压缩算法进行压缩的模块有两种:

mod_gzip和mod_deflate.

Apache1.x系列没有内建网页压缩技术,使用额外的第三方mod_gzip模块。

Apache2.0以上的版本中gzip压缩使用mod_deflate模块。

配置步骤:

(1)要开启gzip压缩的mod_deflate模块。

(2)在虚拟机主机里面进行配置,

要针对那些文件配置压缩,要根据文件类型来具体的配置压缩。

注意:

为什么要指定文件类型来压缩?

压缩也是要耗费cpu资源的,图片/视频等文件,压缩效果也不好。

一般压缩文本格式的文件。

配置的语法:

DeflateCompressionLevel6#压缩级别为6,可选1-9,推荐为6

AddOutputFilterByTypeDEFLATEtext/plain#压缩文本文件

AddOutputFilterByTypeDEFLATEtext/html#压缩html文件

AddOutputFilterByTypeDEFLATEtext/xml#压缩xml文件

压缩级别:

DeflateCompressionLevel指令来设置压缩级别。

该指令的值可为1(压缩速度最快,最低的压缩质量)到9(最慢的压缩速度,压缩率最高)之间的整数,其默认值为6(压缩速度和压缩质量较为平衡的值)

没有压缩之前:

压缩之后的效果:

最终的虚拟机配置代码:

80>

DocumentRoot"D:

/amp/demo"

ServerName

/amp/demo">

OptionsindexesFollowSymLinks

#开启缓存功能

ExpiresActiveOn

#针对jpeg的图片文件设置缓存。

ExpiresByTypeimage/jpeg"accessplus1months"

#ExpiresByTypeimage/gif"accessplus3months"

headersetcache-control"no-store,must-revalidate"

AllowOverrideAll

Orderallow,deny

allowfromall

#压缩级别为6,可选1-9,推荐为6

DeflateCompressionLevel6

#压缩文本文件

AddOutputFilterByTypeDEFLATEtext/plain

#压缩html文件

AddOutputFilterByTypeDEFLATEtext/html

#压缩xml文件

AddOutputFilterByTypeDEFLATEtext/xml

4、把比较占用流量的一些资源单独部署服务器。

打开一个请求分发的目录。

五、大存储的解决方案

1、使用服务器端的缓存技术,目的是减少或不查数据库

(1)页面静态化技术(磁盘缓存)

(2)内存缓存技术(redis/memcache/mysql里面的memeory引擎)

2、数据库方面的优化。

无论如何优化,如何做缓存,总是要操作数据库的,要从数据库的层面来提高访问速度。

六、页面静态化之真静态

1、页面静态化的分类

从形式上来分:

真静态:

把一个动态的页面(操作数据库),生成一个静态页面.html文件。

伪静态:

从表面上来看,是一个静态页面,实际上操作是一个动态页面。

比如如下网站:

伪静态主要是利用seo,防sql注入。

从范围来说:

全部静态:

局部静态(局部动态),比如用户登录状态。

2、实现方式:

真静态:

主要使用ob缓存技术,ob缓存是缓存的响应主体。

伪静态:

利用web服务器的重写机制(rewrite)。

3、ob缓存的讲解

ob就是output_buffering:

输出缓存,在请求一个php的过程中,我们实际上经过三个缓存,ob缓存,程序缓存,浏览器缓存。

最后输出数据。

ob缓存是可以关闭的。

程序缓存是不能关闭,是默认就开启的,用于缓存发送到浏览器端的数据。

如何开启ob缓存:

(1)使用函数ob_start()来开启ob缓存,只针对当前页面起作用。

(2)使用php.ini配置文件来开启ob缓存。

4、ob缓存对应的函数,

ob_start();//开启ob缓存。

ob_get_contents();//获取ob缓存里面的数据

ob_clean();//清除ob缓存里面的数据,并没有关闭ob缓存

ob_end_clean();//清除ob缓存里面的数据,并关闭ob缓存。

ob_flush():

把ob缓存里面的数据给刷新(移动,推送)到程序缓存,并不关闭ob缓存。

如果ob缓存出现了嵌套,则内层ob缓存把数据推送的外层的ob缓存。

ob_end_flush();把ob缓存里面的数据给刷新(移动,推送)到程序缓存,并关闭ob缓存。

如果ob缓存出现了嵌套,则内层ob缓存把数据推送的外层的ob缓存,并关闭内层的ob缓存。

ob缓存是可以嵌套的。

常用的:

ob_start();

//执行代码、取出数据库的数据

$content=ob_get_contents();

//生成静态页面。

file_put_contents($filename,$contents);

5、真静态典型案例:

(1)完成新闻列表页面:

newslist.php页面

(2)完成新闻详情页面newsinfo.php页面。

6、真静态案例扩展

在以上案例中,当数据库里面的数据内容变化了,还是读取的原来生成的静态页面,我们要要重新生成静态页面。

思路:

给生成的静态页面一个缓存周期,比如是5分钟,5分钟过后,则重新生成静态页面。

如果一个网站并发量是500,5分钟内操作了数据库500*300=15万次。

如果做了静态化,5分钟内操作数据库1次。

如何判断页面在缓存有效期内:

思路:

文件的最后修改时间+缓存有效期》当前的时间戳

16:

16分:

缓存5分钟16:

22

该条件就表示每隔5分钟重新生成静态页面。

7、TP框架如何使用真静态。

(1)在总的配置文件里面,开启静态缓存;

(2)在需要生成真静态的模块中,添加生成静态页面的配置。

缓存时间,过了缓存时间要重新生成。

生成静态页面的名称

哪个控制器中的哪个方法,要生成静态页面。

生成的静态页面:

8、真静态的优缺点说明:

优点:

(1)速度快

(2)安全性高(3)利于seo

缺点:

就是占有磁盘空间.,如果过大,对磁盘响应速度有影响

在什么情况下,建议不要使用真静态

(1)页面的数据更新频繁,最好不要使用真静态(比如股票,基金,等实时报价系统)

(2)会生成海量页面(比如大型论坛bbs,csdn)

(3)查询该页面一次后,以后再也不查询该页面.

(4)不愿意被搜索引擎抓取的页面.

(5)访问量小的页面.

七、页面静态化之伪静态

伪静态:

把一个动态的地址伪装成一个静态的地址

实现方式:

利用web服务器的rewrite机制。

rewrite机制:

将一个请求URL重写到另一个请求上!

比如:

index.html重写成index.php

abc.php重写成123.php

news_sport_id12.html重写成news.php?

type=sport&id=12

1、原理说明:

2、开启重写模块。

打开apache的配置文件。

3、完成一个入门案例:

当请求index.html页面,重写成index.php页面。

使用分布式配置文件来完成配置,在根目录下面通过编辑器另存为的方式新建一个.htaccess文件。

要使用.htaccess文件,则要保证虚拟主机里面的配置。

AllowOverride配置项为All

为All则启用.htaccess的配置。

4、配置的语法:

#重写引擎开关

RewriteEngineon

#定义重写发生的条件

RewriteCond意思是:

满足什么条件才可以重写。

#配置重写规则

RewriteRuleindex.htmlindex.php

具体的语法:

(1)RewriteCond的语法:

RewriteCond判断依据条件表达式[条件标志]

判断依据:

可以是服务器变量:

条件表达式:

-f表示是一个文件

-d表示是一个目录

条件标志:

[NC]不区分大小写,

[OR]默认条件之间的关系是and,使用该标志表示和前面的条件是或的关系。

案例:

如果访问的文件存在,则访问该文件,若不存在,则执行重写

配置的代码:

(2)RewriteRule的语法:

语法:

RewriteRule请求的url目标url

请求的url可以使用正则完成匹配。

案例:

使用新闻列表完成伪静态

请求的url:

newsinfo-id1.html重写成newsinfo.php?

id=1

使用正则匹配

newsinfo-id(\d).htmlnewsinfo.php?

id=$1

$1是前面(\d)的内容。

配置代码:

效果:

 

目录

一、内容回顾1

二、mysql优化概述2

三、存储引擎的选择2

1、innodb存储引擎;2

2、myisam存储引擎3

3、memory4

四、查找需要优化的sql语句。

4

1、慢查询日志4

2、使用mysql的profiles机制,7

五、索引的讲解7

1、索引的分类:

8

2、创建索引的语法:

8

3、查看索引9

4、删除索引9

5、创建索引的注意事项10

六、索引的数据结构11

七、explain(执行计划)工具使用12

八、索引的使用细节16

1、多列索引(复合索引)16

2、对于使用like的查询,查询如果是”%aaa”,不会使用到索引,‘aaa%’会使用到索引。

18

3、如果条件中有or,则要求or的索引字段都必须有索引,否则不能用到索引。

18

4、如果列类型是字符串,一定要在条件中将数据使用引号引用起来,否则不使用索引。

20

5、优化groupby语句。

20

6、当取出的数据量超过表中数据的20%,优化器就不会使用索引,而是全表扫描。

22

7、查看索引的使用情况showstatuslike‘Handler_read%’;大家可以注意:

handler_read_key:

利用索引获得纪录的次数。

22

九、索引覆盖23

十、前缀索引24

一、内容回顾

ob_star()

ob_get_contents();

file_put_contents();

二、mysql优化概述

前面我们讲页面静态化,memcache是通过减少对mysql操作来提升访问速度,但是一个网站总是要操作数据库,我们如何提升对mysql的操作速度。

方针:

设计角度:

存储引擎的选择,字段类型选择,范式。

利用mysql自身的特性:

索引,查询缓存,分区分表,存储过程,sql语句的优化

部署大负载架构体系:

主从复制(读写分离)

三、存储引擎的选择

存储引擎是什么?

是数据库的文件系统,是mysql数据库服务器存储数据的数据结构,处于最底层的状态。

1、innodb存储引擎;

从mysql5.5.x开始,默认的存储引擎变更为innodb引擎,支持事务ACID属性(原子性一致性,隔离性,持久性),是为处理巨大数据量时拥有最大性能而设计的。

它的cpu效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。

数据存储方式:

表结构,单独是一个文件,文件名为table.frm

表数据和表的索引是存储到data目录下面的ibdata1里面的。

数据记录的存储是按照主键顺序插入的。

createtablet1(

idintprimarykey,

namevarchar(32)

)engineinnodbcharsetutf8;

insertintot1values(4,'xiaogang'),(2,'xiaolong'),(1,'dagang'),(3,'xiaofeng');

当有大量数据插入时,会变慢,会影响插入效率,因为是按照主键顺序插入,要有一个排序的过程。

并发性:

实现了行锁,擅长并发处理,不会影响其他行的操作。

数据完整性

支持事务ACID属性(原子性一致性,隔离性,持久性),

2、myisam存储引擎

ISAM:

索引序列管理方法

是indexedsequentialaccessmethod(索引顺序存取方法)的缩写优势,在索引的处理上索引独立存储。

数据存储方式

表结构、表数据、表索引是分别来存储的。

创建一个myisam引擎的表后,会形成三个文件。

数据记录的存储是按照插入顺序存储的。

createtablet2(

idintprimarykey,

namevarchar(32)

)enginemyisamcharsetutf8;

insertintot2values(4,'xiaogang'),(2,'xiaolong'),(1,'dagang'),(3,'xiaofeng');

并发性:

实现的表锁,不擅长并发处理,锁定整张表后,会影响其他的进程操作该表。

支持全文索引

在最新的mysql5.6以后,innodb引擎也支持全文索引了。

3、memory

一些访问频繁,变化频繁,又没有必要入库的数据,比如用户在线状态

memory(数据是存储到内存里面的,重启mysql服务会丢失)如果没有memcached或者redis,但是数据操作频繁,可以考虑使用memory存储引擎,比如好友在线状态。

适合做高速缓存。

查看存储引擎:

showengines;

四、查找需要优化的sql语句。

要对,执行速度比较慢的sql语句进行优化,如何查找执行速度比较慢的sql语句呢?

1、慢查询日志

是一种mysql提供的日志,记录所有执行时间超过某个时间界限的sql的语句。

这个时间界限,我们可以指定。

在mysql中默认没有开启慢查询,即使开启了,只会记录执行的sql语句超过10秒的语句。

开启慢查询日志:

在配置文件中my.ini文件,

指定时间界限

指定慢查询日志的文件名称

该慢查询日志存储的位置是:

默认是和数据表同一个目录里面。

在data目录里面会看到生成的慢查询日志文件。

使用命令查看慢查询日志的时间界限:

showvariableslike‘long_query_time’

也可以通过命令,在当前会话下重新设置慢查询日志的时间界限。

setlong_query_time=1;

测试慢查询日志:

使用benchmark(count,expr)函数可以测试执行count次expr操作需要的时间。

打开慢查询日志的文件进行查看:

2、使用mysql的profiles机制,

该机制精确的记录执行sql语句的时间,精确到小数点后8位。

开启profile机制

执行setprofiling=1

使用showprofiles查看sql语句的执行时间;

关闭profiles机制

setprofiling=0,如果不需要查找执行的慢的sql语句,要关闭该机制。

一般情况下,一个sql语句执行速度比较慢原因是没有添加索引。

添加索引之后

添加索引之前

五、索引的讲解

索引就是,利用关键字的某些特性,快速定位数据的一种技术。

1、索引的分类:

普通索引:

利用特定的关键字,标识数据记录的位置(磁盘上的位置,盘号,柱面,扇面,磁道)。

唯一索引:

限制索引的关键字不能重复的索引,数据字段内容可以为null,一个表中可以有多个唯一索引。

主键索引:

限制索引的关键字不能重复,并且不能为NULL。

(不能为NULL的唯一索引)。

一个表中只允许有一个主索引。

全文索引:

索引的关键字,不是某个字段的值,而是字段值中有意义的词来作为关键字建立索引。

复合索引,如果一个索引(以上四种任何都可以),是依赖于多个字段创建的化,称之为复合索引。

2、创建索引的语法:

(1)是在创建表时,直接创建索引。

createtableindex1(

idintauto_incrementcomment'主键索引',

namevarchar(32)comment'唯一索引',

ageintcomment'普通索引',

introvarchar(256)comment'全文索引',

primarykey(id),

uniquekey(name),

index(age),

fulltextindex(intro)

)enginemyisamcharsetutf8;

(2)在创建表完成后,再修改表结构创建索引。

3、查看索引

showindexfromtable_name;

showindexesfromtable_name

desctable_name

showcreatetable_name

4、删除索引

删除主键索引

altertabletable_namedropprimarykey;

在主键索引时,如果有auto_increment属性,则不能直接删除主键索引的,要先删除auto_increment属性,再删除主键索引。

删除非主键索引;

altertabletable_namedropindex索引名称

5、创建索引的注意事项

(1)较频繁的作为查询条件字段应该创建索引

select*fromempwhereempno=1

(2)唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

select*fromempwheresex='男‘

(3)更新非常频繁的字段不适合创建索引

select*fromempwherelogincount=1

(4)不会出现在WHERE子句中字段不该创建索

六、索引的数据结构

1、myisam引擎的索引的数据结构。

索引的节点中存储的是数据的物理地址(磁道和扇区)

在查找数据时,查找

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2