sendfile(数据直接从 kernal的buffer出去)适合小文件
Aio(nginx)全异步(与事件驱动io的区别是:数据会到达mem才会通知,其实也不需要通知 可以直接返回给客户端) 支持:mmap event drive(处理大文件)
上一回说到,在数据库修改后,redis里面的数据不能做到自动更新,必须手动删除更改过的数据 根据以上问题我们做出如下改进:
所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中
配置 gearman 实现数据同步
Gearman是一个支持分布式的任务分发框架:
Gearman Job Server: Gearman 核心程序,需要编译安装并以守护进程形式运行在后台。
Gearman Client:可以理解为任务的请求者。
Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式
运行,Gearman Worker 接收到 GearmanClient 传递的任务内容后,会按顺序处理。
大致流程:下面要编写的 mysql 触发器,就相当于 Gearman 的客户端。修改表,插入表就相当于直接
下发任务。然后通过 lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式,然后
在通过 gearman-mysql-udf 插件将任务加入到Gearman 的任务队列中,最后通过
redis_worker.php,也就是 Gearman 的worker 端来完成 redis 数据库的更新。
dd1:
cd /root/redis
安装gearman软件包:
yum install gearmand-1.1.8-2.el6.x86_64.rpm libgearman-1.1.8-2.el6.x86_64.rpm
/etc/init.d/php-fpm start
netstat -antlpedd1:安装php的gearman扩展
tar zxf gearman-1.1.2.tgz
cd gearman-1.1.2
phpizerpm -ivh libgearman-devel-1.1.8-2.el6.x86_64.rpmlibevent-devel-1.4.13-4.el6.x86_64.rpm libevent-doc-1.4.13-4.el6.noarch.rpmlibevent-headers-1.4.13-4.el6.noarch.rpm
./configure
make && make install
cd /etc/php.d/
cp mysql.ini gearman.ini
vim gearman.ini
/etc/init.d/php-fpm restart查看php已经安装过的扩展:
php -m | grep gearman
php -m | grep mysql
php -m | grep redis
cd redis/