4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
Yac实战,PHP无锁内存nosql【转】 - Gojira 哥斯拉
来自 : gojira.net/2b90b4efc...htm 发布时间:2021-03-25

最近在工作使用了yac,所以比较了下Memcache和Yac的高并发读写性能测试,发现Yac要比Memcache快很多(这里没有比较Yac和Apc的性能情况, 不过据说Yac要比Apc快很多,Apc比Memcache快一倍)。

首先说下,Yac是无锁的、共享内存的Cache,因此可以减少CPU的消耗,而Memcache压力测试时CPU直接飙升到 ~100%。。。。

想学习的同学可以参考鸟哥@laruence的博客: http://www.laruence.com/2013/03/18/2846.html github 地址:https://github.com/laruence/yac

下面简单介绍下安装:

wgethttps://pecl.php.net/get/yac-0.9.2.tgz
tar -zxvf yac-0.9.2.tgz
cd yac-0.9.2
phpize
./config --prefix=/usr/local/yac --with-php-config=/usr/local/php/bin/php-config
sudo make make install

接下来配置php.ini文件:

vim /etc/php.ini
//添加一下内容
extension=php-yac.so
[yac]
yac.enable = 1 //是否开启yac,1表示开启, 0表示关闭
yac.keys_memory_size = 4M //4M可以得到32768个key, 32M可以得到262144个key
yac.values_memory_size = 64M //申请的最大value内存
yac.compress_threshold = -1 //是否压缩数据
yac.enable_cli = 0 //关闭在cli下使用yac

最后重启Web Server服务器即可, windows下面安装yac扩展网上教程一大推,自己去搜索吧,这里不再赘余。。。

Yac的应用场景

让PHP进程之间共享一些简单的数据
高效地缓存一些页面结果

Yac的限制

缓存的键长度不能超过48字节,太长的话可以md5结果后再使用
Value的最大长度不能超过64M,压缩后的长度不能超过1M
当内存不够的时候, Yac会有比较明显的踢出率 (所以如果要使用Yac, 那么尽量多给点内存...)

Yac与Memcache的比较

下面对Yac和Memcache进行性能比较:

yac测试代码:

//test-yac.php
?php
$yac = new Yac();
for($i = 1; $i = 100; $i++){
$key = \'key_\' . $i;
$value = mt_rand(0, 10000);
if( ! $yac- set($key, $value))
var_dump(\"Yac set error: $key -- $value\");
}
for($i = 1; $i = 100; $i++){
$key = \'key_\' . $i;
$value = $yac- get($key);
if($value === false){
var_dump(\"Yac get error: $key not found\");
}
}
?

memcache测试代码:

//test-mem.php
?php
$mem = new Memcache();
$mem- connect(\'localhost\', 11211) or die(\'memcache connected error...\');
for($i = 1; $i = 100; $i++){
$key = \'key_\' . $i;
$value = mt_rand(0, 10000);
if( ! $mem- set($key, $value))
var_dump(\"Memcache set error: $key -- $value\");
}
for($i = 1; $i = 100; $i++){
$key = \'key_\' . $i;
$value = $mem- get($key);
if($value === false){
var_dump(\"Memcache get error: $key not found\");
}
}
?

然后对test-yac.php和test-mem.php文件分别进行ab压力测试:

ab -n 10000 -c 100 http://localhost/demo/test-yac.php

ab -n 10000 -c 100 http://localhost/demo/test-mem.php

从上面的图中,可以看出结论了,Yac要比Memcache快很多,而且出错率很低,所以说Yac还是很不错的。

yac小结

Yac很高效,但还是要注意一些方面,由于Yac是作为PHP的extension形式存在的,所以Yac只能在单机的多个进程之间共享缓存的,这一点一定要注意,一般用作第1级缓存。而在真实的生产环境下,由于服务器有很多,并且有可能是作为分布式集群形式存在,那个时候使用Memcache缓存服务器集群还是更好的选择或者作为第2级缓存(或者使用其他分布式缓存数据库,比如Redis等NoSQL非关系型数据库)。

实际使用中,还是yac的高速+mc集群高可用高稳定+redis的高灵活的组合方式来实现大部分的基础功能。

GOJIRA.NET原创文章未经允许不得转载! 当前页面:Gojira 哥斯拉 Yac实战,PHP无锁内存nosql【转】标签:php 缓存 MemCache 内存 yac redis\"高佬\"高佬高杰仁,第一代哥斯拉爱好者

本文链接: http://gojirafc.immuno-online.com/view-762652.html

发布于 : 2021-03-25 阅读(0)