开发者社区> sunsky303> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PHP无锁内存nosql---Yac的实战

简介: 无锁内存nosql---Yac的实战      最近在工作使用了yac,所以比较了下Memcache和Yac的高并发读写性能测试,发现Yac要比Memcache快很多(这里没有比较Yac和Apc的性能情况, 不过据说Yac要比Apc快很多,Apc比Memcache快一倍)。
+关注继续查看

无锁内存nosql---Yac的实战

  

  最近在工作使用了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

下面简单介绍下安装:

  1. wgethttps://pecl.php.net/get/yac-0.9.2.tgz
  2. tar -zxvf yac-0.9.2.tgz
  3. cd yac-0.9.2
  4. phpize
  5. ./config --prefix=/usr/local/yac --with-php-config=/usr/local/php/bin/php-config
  6. sudo make && make install

接下来配置php.ini文件:

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

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

Yac的应用场景

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

Yac的限制

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

Yac vs Memcache

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

yac测试代码:

  1. //test-yac.php
  2. <?php
  3. $yac = new Yac();
  4. for($i = 1; $i <= 100; $i++){
  5. $key = 'key_' . $i;
  6. $value = mt_rand(0, 10000);
  7. if( ! $yac->set($key, $value))
  8. var_dump("Yac set error: $key --> $value");
  9. }
  10. for($i = 1; $i <= 100; $i++){
  11. $key = 'key_' . $i;
  12. $value = $yac->get($key);
  13. if($value === false){
  14. var_dump("Yac get error: $key not found");
  15. }
  16. }
  17. ?>

memcache测试代码:

  1. //test-mem.php
  2. <?php
  3. $mem = new Memcache();
  4. $mem->connect('localhost', 11211) or die('memcache connected error...');
  5. for($i = 1; $i <= 100; $i++){
  6. $key = 'key_' . $i;
  7. $value = mt_rand(0, 10000);
  8. if( ! $mem->set($key, $value))
  9. var_dump("Memcache set error: $key --> $value");
  10. }
  11. for($i = 1; $i <= 100; $i++){
  12. $key = 'key_' . $i;
  13. $value = $mem->get($key);
  14. if($value === false){
  15. var_dump("Memcache get error: $key not found");
  16. }
  17. }
  18. ?>

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

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

pic

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

pic

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


小结

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

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

(end)

谋胆并重

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
centos下 Apache、php、mysql默认安装路径
apache: 如果采用RPM包安装,安装路径应在 /etc/httpd目录下 apache配置文件:/etc/httpd/conf/httpd.conf Apache模块路径:/usr/sbin/apachectl web目录:/var/www/html 如果采用源代码安装,一般默认安装在/usr/local/apache2目录下 php: 如果采用RPM包安装,安装路
3116 0
centos搭建nginx+php+mysql环境(高于apeche10的服务器)
示意流程图: 官方中文wiki站:http://wiki.nginx.org/Chs 比较好的资源站点:www.s135.com 张宴的个人博客很牛逼 Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
847 0
【转】极品免费网站空间申请:000webhost.com免费1.5G美国空间PHP+MySQL
极品免费网站空间:000webhost.com免费1.5G美国空间PHP+MySQLFiled Under: 未分类 by rainlin2010四.22, 2010 www.000webhost.com是国外著名空间商Hosting24旗下的一个产品,号称“比收费虚拟主机更好用”,而确实如其所说的,该空间非常优质和稳定。
3039 0
二进制数据 + MySQL + PHP 怎样在Mysql中直接储存图片
作者: Florian Dittmer 翻译:netmad    如果你想把二进制的数据,比如说图片文件和HTML文件,直接保存在你的MySQL数据库,那么这篇文章就是为你而写的!我将告诉你怎样通过HTML表单来储存这些文件,怎样访问和使用这些文件。
915 0
PHP环境搭建:Windows 7下安装配置PHP+Apache+Mysql环境教程
  这两天刚装好Windows 7,碰巧前段时间有朋友问我Windows下如何安装搭建PHP环境,所以打算勤劳下,手动一步步搭建PHP环境,暂且不使用PHP环境搭建软件了,在此详细图解在Windows 7下安装配置PHP+Apache+Mysql环境的教程,希望对PHP初学者有所帮助。
1517 0
获取ngnix,apache,php,mysql的编译参数 zz from xi4oyu
有时候nginx,apache,mysql,php编译完了想看看编译参数可以用以下方法 nginx编译参数: #/usr/local/nginx/sbin/nginx -V nginx version: nginx/0.
663 0
Remote Syslog with MySQL and PHP
软件下载: http://www.sfr-fresh.com/unix/privat/msyslog-1.
908 0
SuSE Linux上搭建apache+php+mysql环境
SuSE Linux上搭建apache+php+mysql环境 1.安装apache apache安装包:httpd-2.2.9.tar.gz,安装步骤如下: 1) ./configure --prefix=/usr/local/httpd-2.
990 0
+关注
sunsky303
php、go、linux、异步编程、geeker、hacker
文章
问答
文章排行榜
最热
最新
相关电子书
更多
复杂PHP系统性能瓶颈排查及优化
立即下载
PHP与APM_技术内幕和最佳实践
立即下载
阿里云栖开发者沙龙PHP技术专场-RabbitMQ 的延时队列和镜像队列原理与实战-钱文品
立即下载