https://github.com/tkem/cachetools https://pypi.org/project/cachetools/ opcache是个提升php性能的利器,但是在线上服务器真实遇到过偶尔几台服务器代码上线后,一直没有生效,查看opcache的配置也没有问题。后来没有办法,就在上线步骤中增加了重启php-fpm的操作。今天发现了一个小工具cachetool。可以方便的使用命令行清除opcache的缓存。 当然除了重启php-fpm的进程可以清理opcache缓存外,opcache本身是支持清除缓存的。手动清理缓存涉及到的opcache函数主要为:opcache_reset()和opcache_invalidate() 。 但是opcache_reset()是php中的函数,需要在php脚本中执行,另外当PHP以PHP-FPM的方式运行的时候,opcache的缓存是无法通过php命令进行清除的,只能通过http或cgi到php-fpm进程的方式来清除缓存。 而opcache_invalidate 废除指定脚本缓存是使指定脚本的字节码缓存失效。可用于明确更新的代码文件列表时使用,但不方便清除整个脚本的缓存。cachetool使用起来也非常方便。如下:
原来的libmysql用的好好的,为什么还要搞一个mysqlnd出来呢? 原因一: license问题 libmysql是MYSQL AB公司开发的,现在已经是Oracle集团所属的了,它使用MYSQL license发布。 This ultimately led to MySQL support being disabled by default in PHP mysqlnd 是php的一部分,使用PHP license发布。 从此 licensing 的问题就算是解决了。 原因二:编译问题 使用libmysql的时候,如果要正常编译php,必须首先安装好mysql。 如果是单纯的一台WEB服务器,装个mysql似乎有点浪费了。 mysqlnd的话,就不必安装mysql,直接可用。 原因三:性能问题 由于mysqlnd是一个php扩展,使用了php memory management system,在内存使用方面效率相当高。 举个例子: 使用libmysql的时候,mysql结果集中的每一行都在内存中储存了二次 ! 使用mysqlnd,结果集只会储存一次。 而且它还服从于php.ini中memory_limit的设置。 Using MySQL Native Driver leads to comparable or better performance than using MySQL Client Library。 mysqlnd的新特性 1 改进的persistent connection。 2 特殊函数 mysqli_fetch_all()
https://downloads.mysql.com/archives/proxy/ mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差。下面介绍几款能代替其的mysql开源中间件产品,Atlas,cobar,tddl,让我们看看它们各自有些什么优点和新特性吧。