频道栏目
首页 > 资讯 > 负载均衡 > 正文

PHP企业级应用缓存技术详解

16-01-07        来源:[db:作者]  
收藏   我要投稿

数据缓存主要是指数据库查询缓存,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据, 并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。

用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。

举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个 数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。

页面缓存

每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问 的时候页面文件就发挥作用了。(模板引擎和网上常见的一些缓存类通常有此功能)

时间触发缓存

检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。

内容触发缓存

当插入数据或更新数据时,强制更新缓存。

静态缓存

这里所说的静态缓存是指静态化,直接生成HTML或xml等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。

内存缓存

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

		$memcache=newMemcache; 
	
		$memcache->connect(‘localhost’,11211)ordie(“Couldnotconnect”); 
	
		$version=$memcache->getVersion(); 
	
		echo“Server’sversion:“.$version.”\n”; 
	
		$tmp_object=newstdClass; 
	
		$tmp_object->str_attr=‘test’; 
	
		$tmp_object->int_attr=123; 
	
		$memcache->set(‘key’,$tmp_object,false,10)ordie(“Failedtosavedataattheserver”); 
	
		echo“Storedatainthecache(datawillexpirein10seconds)\n”; 
	
		$get_result=$memcache->get(‘key’); 
	
		echo“Datafromthecache:\n”; 
	
		var_dump($get_result); 
	
		?>

读库的例子


		
	
	
		$sql=‘SELECT*FROMusers’; 
	
		$key=md5($sql);//memcached对象标识符 
	
		if(!($datas=$mc->get($key))){ 
		
	
		//在memcached中未获取到缓存数据,则使用数据库查询获取记录集 
	
		
	
		echo“n”.str_pad(‘ReaddatasfromMySQL.’,60,‘_’).”n”; 
	
		$conn=mysql_connect(‘localhost’,‘test’,‘test’); 
	
		mysql_select_db(‘test’); 
	
		$result=mysql_query($sql); 
	
		while($row=mysql_fetch_object($result)) 
	
		$datas[]=$row; 
	
	
		//将数据库中获取到的结果集数据保存到memcached中,以供下次访问时使用 
	
	
		$mc->add($key,$datas); 
	
		}else{ 
	
		echo“n”.str_pad(‘Readdatasfrommemcached.’,60,‘_’).”n”; 
	
		} 
	
		var_dump($datas); 
	
		?>

PHP的缓冲器

比如eaccelerator,apc,phpa,xcache等等。

MySQL缓存

这也算非代码级的,经典的数据库就是用的这种方式,看下面的运行时间,0.09xxx之类的。


		[client] 
…… default-character-set=gbk default-storage-engine=MYISAM max_connections=600 max_connect_errors=500 back_log=200 interactive_timeout=7200 query_cache_size=64M …… table_cache=512 …… myisam_max_sort_file_size=100G myisam_max_extra_sort_file_size=100G myisam_sort_buffer_size=128M key_buffer_size=1024M read_buffer_size=512M …… thread_concurrency=8

基于反向代理的Web缓存

如Nginx,SQUID,mod_PRoxy(apache2以上又分为mod_proxy和mod_cache)

NGINX的例子


		
#usernobody; worker_processes4; error_loglogs/error.logcrit; pidlogs/nginx.pid; worker_rlimit_nofile10240; events{ useepoll; worker_connections51200; } http{ includemime.types; default_typeapplication/octet-stream; sendfileon; keepalive_timeout65; tcp_nodelayon; #serverpool upstreambspfrontsvr{ server10.10.10.224:80weight=1; server10.10.10.221:80weight=1; } upstreambspimgsvr{ server10.10.10.201:80weight=1; } upstreambspstylesvr{ server10.10.10.202:80weight=1; } upstreambsphelpsvr{ server10.10.10.204:80weight=1; } upstreambspwsisvr{ server10.10.10.203:80weight=1; } upstreambspadminsvr{ server10.10.10.222:80weight=1; } upstreambspbuyersvr{ server10.10.10.223:80weight=1; } upstreambspsellersvr{ server10.10.10.225:80weight=1; } upstreambsploginsvr{ server10.10.10.220:443weight=1; } upstreambspregistersvr{ server10.10.10.220:80weight=1; } log_formattest_com‘$remote_addr–$remote_user[$time_local]“$request”‘ ‘$status$body_bytes_sent“$http_referer”“$http_user_agent”‘; #——————————————————————– #img.test.com server{ listen10.10.10.230:80; server_nameimg.test.com; location/{ proxy_passhttp://bspimgsvr; includeproxy_setting.conf; } access_loglogs/img.logtest_com; } #style.test.com server{ listen10.10.10.230:80; server_namestyle.test.com; location/{ proxy_passhttp://bspstylesvr; includeproxy_setting.conf; } access_loglogs/style.logtest_com; } #help.test.com server{ listen10.10.10.230:80; server_namehelp.test.com; location/{ proxy_passhttp://bsphelpsvr; includeproxy_setting.conf; } access_loglogs/help.logtest_com; } #admin.test.com server{ listen10.10.10.230:80; server_nameadmin.test.com; location/{ proxy_passhttp://bspadminsvr; includeproxy_setting.conf; } access_loglogs/admin.logtest_com; } #buyer.test.com server{ listen10.10.10.230:80; server_namebuyer.test.com; location/{ proxy_passhttp://bspbuyersvr; includeproxy_setting.conf; } access_loglogs/buyer.logtest_com; }

		#seller.test.com 
server{ listen10.10.10.230:80; server_nameseller.test.com; location/{ proxy_passhttp://bspsellersvr; includeproxy_setting.conf; } access_loglogs/seller.logtest_com; } #wsi.test.com server{ listen10.10.10.230:80; server_namewsi.test.com; location/{ proxy_passhttp://bspwsisvr; includeproxy_setting.conf; } access_loglogs/wsi.logtest_com; } #www.test.com server{ listen10.10.10.230:80; server_namewww.test.com*.test.com; location~^/NginxStatus/{ stub_statuson; access_logoff; } location/{ proxy_passhttp://bspfrontsvr; includeproxy_setting.conf; } access_loglogs/www.logtest_com; error_page500502503504/50x.html; location=/50x.html{ roothtml; } } #login.test.com server{ listen10.10.10.230:443; server_namelogin.test.com; sslon; ssl_certificatecert.pem; ssl_certificate_keycert.key; ssl_session_timeout5m; ssl_protocolsSSLv2SSLv3TLSv1; ssl_ciphersALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_cipherson; location/{ proxy_passhttps://bsploginsvr; includeproxy_setting.conf; } access_loglogs/login.logtest_com; } #login.test.comforregister server{ listen10.10.10.230:80; server_namelogin.test.com; location/{ proxy_passhttp://bspregistersvr; includeproxy_setting.conf; } access_loglogs/register.logtest_com; } } proxy_redirectoff; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; client_max_body_size10m; client_body_buffer_size128k; proxy_connect_timeout90; proxy_send_timeout90; proxy_read_timeout90; proxy_buffer_size4k; proxy_buffers432k; proxy_busy_buffers_size64k; proxy_temp_file_write_size64k;

mod_proxy的例子

ServerNamewww.zxsv.com ServerAdminadmin@zxsv.com #reverseproxysetting ProxyPass/http://www.zxsv.com:8080/ ProxyPassReverse/http://www.zxsv.com:8080/ #cachedirroot CacheRoot“/var/www/proxy” #maxcachestorage CacheSize50000000 #hour:every4hour CacheGcInterval4 #maxpageexpiretime:hour CacheMaxExpire240 #Expiretime=(now–last_modified)*CacheLastModifiedFactor CacheLastModifiedFactor0.1 #defaltexpiretag:hour CacheDefaultExpire1 #forcecompleteafterprecentofcontentretrived:60-90% CacheForceCompletion80 CustomLog/usr/local/apache/logs/dev_access_logcombined
相关TAG标签
上一篇:Memcached常规应用与分布式部署方案
下一篇:WEB监控体系之设备负载监控
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站