在上述流程中每一个环节都可能会存在性能问题
例如客户端是电信网络web服务器所接入的为教育网络。由于线路不一致需要进行转换因此导致缓慢。解决办法web服务器部署多线路
1、PHP代码优化
2、PHP引擎的解析速度
3、缓存编译之后的结果(每次解析相同的文件不需要翻译)
对于mysql数据库本身不能承载一个比较高的访问量并且不同的SQL语句性能都不一样。Mysql本身会存在很大的性能问题
1、网站开发中尽量使用较小的资源文件
2、使用压缩技术(gzip)
3、使用cdn加速资源文件
4、使用缓存技术(内存缓存redis/memcache/页面静态化)
5、对数据库进行优化
6、网站架构重构采用分层模式设计
7、使用负载均衡技术
8、数据库使用读写分离或者分布式技术
9、对相关软件配置进行优化
10、升级硬件
Memcache是一个基于内存的键值对的缓存系统
Memcache本身只是一款软件,能够去操作内存中的数据。因此memcache将数据保存在内存中。在内存中数据不太安全一旦断电重启就会导致内存数据丢失
键值对即key-value的一个对应关系。可以通过名称就找到对应的数据。键值对可以理解为PHP中的变量 通过变量名称即可获取到对应的值
缓存系统为一个临时存储数据的介质
1、当获取数据时先读取缓存系统中的内容。如果读取到数据则直接使用。否则先查询原始数据(数据库),获取数据之后在将数据保存到缓存系统中
2、当修改数据时先修改原始数据。在更新缓存系统中的内容(修改数据或者删除数据)
①关于软件包说明
②创建memcache安装目录
③拷贝安装文件
④运行cmd进入memcache安装目录
先以管理员身份运行cmd
进入memcache安装包目录
①安装成为服务
②查看自己计算机中的服务
③开启服务
选中服务启动即可
或者使用命令启动
-p:指定memcache的端口号 默认为11211
-d :start/stop:启动或者关闭memcache
-d: install/uninstall:安装/卸载memcache服务
-u:指定memcache运行的用户 只针对Linux下有效
-m:指定memcache最多能够使用的内存大小默认为64M
-c:指定memcache最大的并发连接数 默认为1024个
memcache.exe -help
①直接在命令行中运行telnet命令
报错说明目前没有安装telnet工具
②打开控制面板进入程序和功能
③点击启用或者关闭Windows功能
④开启telnet客户端
⑤使用telnet工具
当再次执行在命令行中telnet会进入到如下界面
⑥使用telnet连接本机的memcache服务
作用:用于设置数据(通过memcache向内存写入数据)
语法:set 键名 0|1(是否需要压缩) 0(有效时间0表示永不过期) 指定数据的字符长度(注意写完之后要回车)
具体的数据
键名要求是尽量简短但是又需要表示出含义。键名最多能够支持250个字符。例如使用memcache存储用户信息user_info_id_1
0:表示不压缩,不压缩直接将数据保存到内存中,相对于压缩功能不压缩速度更快但是会占用较高的存储空间
1:表示压缩。压缩将数据处理之后再保存到内存中。相对于不压缩功能压缩速度略差但是会占用存储空间会少
指定数据在内存中保留的时间。属于一个整形数字单位为秒。当值为0表示数据长期保存。
在memcache中只能保存字符串的数据格式。并且数据大小有上限最大能存储1M的数据
Set指令能够实现数据的添加与修改功能
作用:用于通过memcache从内存中读取数据
语法:get 键名
作用:通过memcache向内存中添加数据
语法:与set指令一模一样
作用:将key对应的数据删除掉
语法:delete 键名
作用:将键名对应的内容进行增加
语法:incr 键名数字
作用:将键名对应的内容进行减少
语法:decr 键名数字
作用:清除通过memcache所操作的内存中的数据
语法:flush_all
此命令很危险生成环境下绝对不会使用。一旦使用会造成雪崩效应(多次重启mysql之后会回归正常)。想要处理合适可以使用keepalive软件对memcache服务器进行心跳检测
作用:查看服务器状态
语法:stats
Memcache服务器性能有一个命中率进行衡量
命中率=get_hits/cmd_get*100%
一般memcache命中率在70-90之间都算正常
①先查看phpinfo信息
②下载对应的dll文件
③查看自己的PHP扩展目录所在地址
④拷贝扩展文件到对应的目录下
⑤修改php配置文件
⑥重启apache查看信息
备注:关于memcache的扩展一共是有两套。分别为memcache跟memcached。对于两套扩展都可以通过php操作memcache。只是用法上有一点区别
①查看文档中说明
②编写代码
③效果
整形
浮点
字符串
布尔
数组
对象
资源
null
①编写代码测试
②查看结果
从上述的结果中得知PHP中的四种基本数据类型都支持
①创建测试代码
②执行后查看结果
③使用原始的telnet工具查看
从上述结果中可知对于PHP中数组数据类型本身memcache不支持。但是由于PHP的扩展在写入数据类型数据时会先转换为字符串。在读取数据时得到结果之后会转换为数组格式
①编写测试代码
②访问查看结果
③通过使用telnet查看
从上述结果中对于memcache本身也不支持对象数据类型。同样是由于php扩展进行序列化操作之后导致可以支持
①代码
②查看效果
③查看telnet工具
④再次编写代码测试
从上述结果中发现空数据类型可以支持但是资源不支持。
总结:PHP中的数据类型除了资源数据类型之外,其他的数据类型都可以支持。但是在对于其他的数据类型的支持是有PHP扩展实现
Memcache本质是只支持字符串的数据类型
1、作为缓存系统使用
2、使用memcache实现session共享
3、作为分布式存储
将数据保存到不同的memcache服务器中。可以提升memcache性能。并且存储上限也可以突破
①将memcache对应的软件包使用ftp上传
②命令行进入上传目录解压libevent
③进入解压目录执行configure
④安装
⑤回到root目录解压memcache源码包
⑥进入解压目录执行configure
⑦安装
⑧启动memcache服务
⑨检查memcache是否正常启动
⑩关闭防火墙
memadmin为memcache的管理工具,是使用php编写的工具
①将memadmin源码拷贝到web目录下
②查看用户名与密码
③使用浏览器访问
此步骤使用自己的账户密码登录,如果第二步没有修改用户名与密码都是admin
④添加本机的memcache连接
⑤添加Linux中的memcache连接
⑥开始管理
⑦使用memadmin工具查看数据
①将memcache中数据全部清空
针对两台memcache都执行
②创建代码
④访问查看效果
⑤查看memadmin中各服务器中的数据
对于memcache分布式寸存储并不是memcache本身就支持此功能。由于PHP的memcache扩展会自动的对key进行运算决定具体的内容应该操作那一台memcache服务器
1、使用文件存储session信息
2、使用数据库存储session信息
3、使用memcache存储session信息
①创建测试数据表
CREATE TABLE `session` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`sessionid` varchar(255) NOT NULL DEFAULT '',
`data` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `session` (`sessionid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
②修改session机制查看具体流程
③将session信息保存到数据库中