以下请在本公众号里操作
回复「微X群」
加入PHP技术交流群,一块学习交流
回复「商务合作」
就可获取合作方式与客服联系方式。
一个网站或一个应用的标准流程是浏览器向应用服务器发出请求,应用服务器做有些计算和规律判断之后再请求数据库,数据库收到请求后在经过计算将数据返回给应用服务器,应用服务器再次计算后把数据返回给浏览器。
那样,随着web业务的繁杂度和并发量的增多,应用服务器所做的计算和规律处理越来越多,而应用服务器的资源是有限的,且数据库每秒接受并处理请求的次数亦是有限的。
为了在有限的资源供给尽可能多的吞吐量,便是减少计算量,缩短请求流程(减少网络I/O或硬盘I/O)。此时,就用到了缓存(Cache)
php缓存类型
1、数据缓存:
这儿所说的数据缓存指的是数据库查找PHP缓存机制,每次拜访页面的时候,都会先检测相应的缓存数据是不是存在,倘若不存在,就连接数据库,得到数据,并把查找结果序列化后保留到文件中,以后一样的查找结果就直接从缓存表或文件中得到。
用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。
举个常用的办法,多表相关的时候,把附表中的内容生成数组保留到主表的一个字段中,需要的时候数组分解一下,这般的好处是只读一个表,坏处便是两个数据同步会多不少过程,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。
2、页面缓存:
每次拜访页面的时候,都会先检测相应的缓存页面文件是不是存在,倘若不存在,就连接数据库,得到数据,表示页面并同期生成缓存页面文件,这般下次拜访的时候页面文件就发挥功效了。(模板引擎和网上平常的有些PHP缓存机制类一般有此功能)
3、时间触发缓存:
检测文件是不是存在并且时间戳少于设置的过期时间,倘若文件修改的时间戳比当前时间戳减去过期时间戳大,那样就用缓存,否则更新缓存。
4、内容触发缓存:
当插进数据或更新数据时,强制更新PHP缓存机制。
5、静态缓存:
这儿所说的静态缓存指的是静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。
实例扩展:
Memcached;
是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它经过在内存中缓存数据和对象来减少读取数据库的次数,从而加强动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。 // 初始化$cache = new
Memcache(); $cache->pconnect(127.0.0.1, 11211
); // 写入$cache->set(CACHE_PREFIX . $key, $value, MEMCACHE_COMPRESSED, $expire);(CACHE_PREFIX 为了避免命名冲突,最好加一个前缀,MEMCACHE_COMPRESSED一个标记,设置为0
暗示不压缩) // 读取
$cache->get(CACHE_PREFIX . $key); // 删除
$cache->delete(CACHE_PREFIX . $key);
Redis:
是一个开源的运用ANSI C语言编写、支持网络、可基于内存也可持久化的日志型、Key-Value数据库,并供给多种语言的API。类似的安装好php扩展// 初始化$cache = new Redis(); // 初始化$cache = new \Redis();
$cache->connect(CACHE_HOSTNAME, CACHE_PORT); // 先检测是不是存在,而后写入并设置有效时间if
($cache->exists($key)){
$cache->delete(CACHE_PREFIX . $key);
}
$cache->set(CACHE_PREFIX . $key, serialize($value));
$cache->expire(CACHE_PREFIX . $key, $expire); // 读取
$cache->get(CACHE_PREFIX . $key);
除了上面的有些缓存类型,这儿亦给大众讲讲php加速缓存器opcache,apc,xcache,eAccelerator原理与配置办法。
1、opcache
opcache 经过将 PHP 脚本预编译的字节码存储到共享内存中来提高 PHP 的性能, 存储预编译字节码的好处便是 省去了每次加载和解析 PHP 脚本的开销。
PHP 5.5.0 及后续版本中已然绑定了 opcache 扩展。针对 PHP 5.2,5.3 和 5.4 版本能够运用PECL扩展中的 opcache 库。
windows下的php扩展下载位置:
http://windows.php.net/downloads/pecl/releases/
打开php.ini文件,找到[opcache]
; dll位置
extension=php_opcache.dll
; 开关打开
opcache.enable=1
; 开启CLI
opcache.enable_cli=1
; 可用内存, 酌情而定, 单位为:Mb
opcache.memory_consumption=128
; Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB)
opcache.interned_strings_buffer=8
; 对多缓存文件限制, 命中率不到 100% 的话, 能够试着加强这个值
opcache.max_accelerated_files=10000
; opcache 会在一按时间内去检测文件的修改时间, 这儿设置检测的时间周期, 默认为 2, (单位:秒)
opcache.revalidate_freq=1
; 打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会加强
opcache.fast_shutdown=1
2、APC
Alternative PHP Cache (APC) 是一个开放自由的PHP opcode 缓存。它的目的是供给一个自由、 开放,和健全的框架用于缓存和优化PHP的中间代码。
下载apc扩展dll,选取你对应的PHP版本 http://windows.php.net/downloads/pecl/releases/apc/
把下载的php_apc.dll放入php的ext扩展目录下。 打开php.ini文件,配置如下:[apc
]
extension=php_apc.dll apc.enabled=1
; 共享内存块的数目 apc.shm_segments=1
; 共享内存块的体积(单位:MB) apc.shm_size=64
; 优化级别,更高的值则运用更主动的优化 apc.optimization=1; 源文件的数目,不确定设置为0apc.num_files_hint=0
; 缓存条目在缓冲区中准许逗留的秒数 apc.ttl=7200
; 针对每一个用户缓存条目在缓冲区中准许逗留的秒数 apc.user_ttl=7200
; 缓存条目在垃圾回收表中能够存在的秒数 apc.gc_ttl=7200
; 文件写锁 apc.write_lock=on
3、xcache
xcache是一个开源的 opcode 缓存器/优化器。
下载xcache,选取对应PHP版本的xcache http://xcache.lighttpd.net/pub/Releases/
把php_xcache.dll放到php的ext目录下。
打开php.ini,配置如下:
[xcache-common]
extension = php_xcache.dll
[xcache.admin] xcache.admin.enable_auth =Onxcache.admin.user = "admin"xcache.admin.pass = "md5后你的秘码"
[xcache]
; 选取底层内存共享实现方法 xcache.shm_scheme = "mmap"xcache.size = 128
M
; 设置为CPU数 xcache.count =1
; 只是个参考值 xcache.slots = 8
K
; 缓存时间 xcache.ttl = 1200
; 垃圾回收的时间间隔 xcache.gc_interval = 1200
; 同上,针对变量缓存设置 xcache.var_size = 4
M xcache.var_count = 1xcache.var_slots =8
K xcache.var_ttl = 1200
; 变量最大缓存时间 xcache.var_maxttl = 7200xcache.var_gc_interval = 1200xcache.var_namespace_mode = 0xcache.var_namespace = ""xcache.readonly_protection =Off
; 针对win系统,这儿不是文件路径 xcache.mmap_path = "xcache"xcache.coredump_directory = ""xcache.coredump_type = 0xcache.disable_on_crash = Offxcache.experimental = Offxcache.cacher = Onxcache.stat = Onxcache.optimizer = Off
[xcache.coverager] xcache.coverager = Offxcache.coverager_autostart = Onxcache.coveragedump_directory =""
4、eAccelerator
eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,加强了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。它还有对脚本起优化功效,以加快其执行效率。
下载eAccelerator
http://www.sitebuddy.com/PHP/Accelerators/eAccelerator_windows_binaries_builds
把下载到的eAccelerator_ts.dll放到php的ext目录下。 打开php.ini,配置如下:
[eAccelerator] extension="eAccelerator_ts.dll"eaccelerator.shm_size="16"eaccelerator.cache_dir="设置缓存目录"eaccelerator.enable="1"eaccelerator.optimizer="1"eaccelerator.check_mtime="1"eaccelerator.debug="0"eaccelerator.log_file = "设置日志文件"eaccelerator.filter=""eaccelerator.shm_max="0"eaccelerator.shm_ttl="0"eaccelerator.shm_prune_period="0"eaccelerator.shm_only="0"eaccelerator.compress="1"eaccelerator.compress_level="9"
[eAccelerator] extension="eAccelerator_ts.dll"eaccelerator.shm_size="16"eaccelerator.cache_dir="设置缓存目录"eaccelerator.enable="1"eaccelerator.optimizer="1"eaccelerator.check_mtime="1"eaccelerator.debug="0"eaccelerator.log_file = "设置日志文件"eaccelerator.filter=""eaccelerator.shm_max="0"eaccelerator.shm_ttl="0"eaccelerator.shm_prune_period="0"eaccelerator.shm_only="0"eaccelerator.compress="1"eaccelerator.compress_level="9"
原文链接:https://www.jb51.net/article/233389.htm
点个赞
再走吧
|