大项目优化的作用非常明显。因为访问的人数特别多,总计下来的时间就会非常高。
平时理解的大项目:流量大,并发高的。程序复杂度高的。
1)代码优化
从sql语句来讲:
2)数据库优化
表结构的设计,就是SQL语句的抒写。但是数据库有很严重的问题。数据库经常会遇见的问题是:IO瓶颈!
IO瓶颈就是硬盘读写速度已经跟不上,我们需要数据的速度。所有我们要减少与数据库的交互。
操作数据库的时候,一定要把数据库拿到测试机上测试一下。验证通过之后才能在线上操作。
公司里禁止使用delete。删除数据都是假数据。update一个字符,0表示删除,1表示存在。
3)静态化技术
使用PHP把生成的页面保存为html页面的数据,就是静态化技术。就是不常修改的网页,就可以生成静态化html页面。
4)缓存优化
就是把数据缓存内存的技术。把静态化页面放在内存中访问速度就会成倍的提升。
PHP可以不可以操作内存?
可以的操作的:使用的扩展是shmop。
但是这个扩展有一个问题:
可以操作的内存特别小,要缓存的数据经常是非常大的。这个时候就出现了第三方内存缓存管理工具。
Memcached 是国外社区网站LiveJournal的开发团队开发的高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。
memcache = memory cache = 内存缓存
缓存:就是把中间结果集,缓存起来的技术
memcache内存缓存服务器,也称之为:NoSQL
从项目的角度来分析:
页面缓存:把生成的html页面,缓存起来
数据缓存:把中间结果集,缓存起来。
就可以使用memcache实现:
说一下mysql与memcache区别:
mysql:保存的是源数据,memcache保存的是中间结果集数据。
mysql:数据是非常重要的。memcache数据是临时的,只要求访问速度快。
给我们的memcache带来了特性:
memcache只能保存字符串的数据类型。
memcache的储存方式是:key => value
memcache的数据是不能持久化的。
memcache的数据是临时的,不需要备份。
memcache的key限度大小:250字节
memcache的value限度大小:1M
六、Memcache应用场景
1、分布式Memcache服务器
分布式:就是让N台服务器。协同工作的方式,就叫分布式。
我们的memcache服务器。是一个支持高速的内存缓存服务器。实现的功能特别有限,为了保证高速的特点。服务器本身并没有实现分布式的功能。
庆幸我们的php_memcache扩展帮助我们实现了这一个功能。
通过代码来看如果实现的。
再启动二台memcache:
再同一台电脑上启动三台memcache服务。端口号一定不能一样。
默认的:11211,11212,11213
为什么在一台上存储呢?
分布式算法的实现:使用key值和服务器的数量进行hash运算。这个运算是addserver提供的。
通过set的多个不同的key值进行了查看。发现数据存储的不是平均分配的。这样memcache的使用率就不一样的。这一点大家注意!!!
所以我们可以通过PHP代码实现这一个功能。大家可以自己实现一下hash通过key值进行分配。
哈希一致算法,这个算法就是解决我们数据分配不公的问题。它是通过hash服务器的唯一值来确定的,比如(IP地址)
七、Memcache中几个常见问题详解
1、与Memcache相关的几个常见问题
1)Memcache内存算法(lazy expiration)
懒惰算法:就是存放数据的时候设置的过期时间。在服务器内容并不会时时的检查。只是在数据被get的时候检查。检查到时间过期,就返回空值;不过期就返回数据。
2)Memcache缓存策略(LRU: Least Recently Used)
LRU(最近最少使用原则):在数据存储满的时候,继续再存入数据就会把最近最少使用的数据给删除掉。
如果启动的时候设置参数[-M]就可以禁止这个最近最少使用原则的规则。
根据实际情况来处理。目前禁止它的可能性太少太少了,如果没有特别的说明,在工作中就不要禁止使用它。
3)Memcache分布式算法
memcache的扩展实现了:addServer
addServer是通过使用数据的key值与服务器的数量。进入hash计算出唯一值。这个唯一值,就对应着具体某一台服务器。
PHP的代码也可以实现。根据一致性哈希可以实现更可靠的数据分配。这通过使用服务器的唯一标识,例如IP地址,来进行的。
当然,同学们也可以自己实现其它分布式功能。。
4)扩展:
Nagios插件 :perl
Cacti模块:python
Memcache.php
找到这个文件:就在php_memcache.dll扩展包里面。
把它复制到www站点目录里面:
2、与Memcache相关的面试题
1)memcached的cache机制是怎样的?
懒惰算法 + 最近最少使用原则
2)memcached如何实现冗余机制?
冗余:就是有好多好多不经常使用的。
可以不用实现冗余机制,如果非要实现。那就搞一个主备。
3)memcached如何处理容错的?
可以不用实现容错机制。因为memcache是临时缓存的中间结果集数据。如果挂掉就可以取源数据(mysql)。但是非要让你实现。可以搞一个主备。
4)如何将memcached中keys批量导入导出?
这个也不要实现。memcache是高速缓存工具,任何有临时让它稍一下的动作都应该三思。这个时候,可以让mysql数据库创建一个表,存储缓存数据。有需要批量导入导出的时候,就使用这个表的数据,即可。
5)memcached是如何做身份验证的?
memcache是没有登录功能的,没有用户与密码的。没有身份验证。如果你非要做。
程序员总是有方法的 。使用防火墙就可以实现。
6)memcached能接受的key的最大长度是多少?
key的最大长度是:250字节
7)memcached对item的过期时间有什么限制?
可以使用时间戳,也可以使用秒。但是秒只能使用30天以内的。超过就要使用时间戳。
8)memcached最大能存储多大的单个item?
最大是1M
9)为什么单个item的大小被限制在1M byte之内?
因为内存算法是这样实现的。