大型项目优化

大项目优化的作用非常明显。因为访问的人数特别多,总计下来的时间就会非常高。

 平时理解的大项目:流量大,并发高的。程序复杂度高的。

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的数据是临时的,不需要备份。

 

memcachekey限度大小:250字节

memcachevalue限度大小:1M

六、Memcache应用场景

1、分布式Memcache服务器

分布式:就是让N台服务器。协同工作的方式,就叫分布式。

 

我们的memcache服务器。是一个支持高速的内存缓存服务器。实现的功能特别有限,为了保证高速的特点。服务器本身并没有实现分布式的功能。

庆幸我们的php_memcache扩展帮助我们实现了这一个功能。

通过代码来看如果实现的。

 

再启动二台memcache

再同一台电脑上启动三台memcache服务。端口号一定不能一样。

默认的:112111121211213

为什么在一台上存储呢?

分布式算法的实现:使用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)如何将memcachedkeys批量导入导出?

这个也不要实现。memcache是高速缓存工具,任何有临时让它稍一下的动作都应该三思。这个时候,可以让mysql数据库创建一个表,存储缓存数据。有需要批量导入导出的时候,就使用这个表的数据,即可。

 

5)memcached是如何做身份验证的?

memcache是没有登录功能的,没有用户与密码的。没有身份验证。如果你非要做。

程序员总是有方法的 。使用防火墙就可以实现。

 

6)memcached能接受的key的最大长度是多少?

key的最大长度是:250字节

 

7)memcached对item的过期时间有什么限制?

可以使用时间戳,也可以使用秒。但是秒只能使用30天以内的。超过就要使用时间戳。

 

8)memcached最大能存储多大的单个item

最大是1M

 

9)为什么单个item的大小被限制在1M byte之内?

因为内存算法是这样实现的。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值