天涯论坛

 找回密码
 立即注册
搜索
查看: 15|回复: 3

[精选] php缓存的类型有哪些?都是怎么用的?

[复制链接]

2996

主题

182

回帖

9920万

积分

论坛元老

Rank: 8Rank: 8

积分
99209276
发表于 2024-10-4 15:57:36 | 显示全部楼层 |阅读模式

以下请在本公众号里操作

回复「微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.111211

);

// 写入$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

点个赞

再走吧





上一篇:PHP函数介绍—fopen(): 打开文件或URL
下一篇:原创 psd格式文件用什么打开?
回复

使用道具 举报

3133

主题

2万

回帖

9996万

积分

论坛元老

Rank: 8Rank: 8

积分
99968644
发表于 2024-10-23 21:34:47 | 显示全部楼层
可以发布外链的网站 http://www.fok120.com/
回复

使用道具 举报

3043

主题

2万

回帖

9606万

积分

论坛元老

Rank: 8Rank: 8

积分
96065868
发表于 2024-10-25 21:40:42 | 显示全部楼层
你的见解真是独到,让我受益良多。
回复

使用道具 举报

2992

主题

2万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99109210
发表于 2024-11-11 07:52:32 | 显示全部楼层
回顾历史,我们不难发现:无数先辈用鲜血和生命铺就了中华民族复兴的康庄大道。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-22 13:29 , Processed in 0.153287 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.