mac上安装memcached

1.解包封装的措施 

前言:

Memcached与Memcache的区别

至于Memcached和Memcache的界别,其实很不难,一个是服务端,贰个是客户端,如同mysql一样,我们在指令行里输入各类sql语句就能查询到必要的结果,那就是客户端,客户端接收大家输入的授命从服务端查询,mysqld就是服务端,就是响应客户端的额后台进程,在那里也如出一辙Memcached是服务端,而Memcache就是客户端。

所以大家要动用Memcached,首先在服务端安装好Memcached,并运转Memcached,然后安装Memcache就能动用了。

2.服务端 tcpServer.php

设置表明:

需安装

  1. 服务端(memcached)
  2. 客户端(libmemcached)
  3. php的memcache扩展

安装服务端
brew install memcached

测试memcached安装是还是不是成功
ls -al /usr/local/bin/mem*

启动memcached服务(关于各参数可知详尽表达)
memcached -d

假定急需开机自运转,输入以下命令
ln -sfv /usr/local/opt/memcached/*.plist ~/Library/LaunchAgents


设置客户端
brew install libmemcached


php的memcache扩展

  • 下载稳定版的memcache包
    地址:http://pecl.php.net/package/memcache
  • 解压
    tar -xzf memcache-2.2.7.tgz
  • 编译

$ cd memcache-2.2.7  
$ phpize  
$ ./configure --enable-memcache --with-php-config=/usr/local/opt/php54/bin/php-config --with-zlib-dir  
$ sudo make & make install  

注:如若有发出以下的题材(php7环境)

fatal error: 'ext/standard/php_smart_str.h' file not found

git clone
https://github.com/php-memcached-dev/php-memcached.git
cd php-memcached/
git checkout php7
phpize
./configure –disable-memcached-sasl
–with-libmemcached-die=/usr/local/libmemcached
make && make instal

可参考:http://www.cnblogs.com/zqifa/p/linux-php-2.html

安装到位之后

将路径设置在php.ini文件的extension_dir参数 (小编那边私自认同的so文件是在
/usr/lib/php/extensions/no-debug-non-zts-20131212/)

图片 1

image.png

php.ini(我那边地址是 /usr/local/etc/php/7.0/php.ini )添加参数:

extension_dir="/usr/local/Cellar/php70/7.0.14_7/lib/php/extensions/no-debug-non-zts-20151012/"
extension=memcached.so

  • 重启php-fpm

$ killall php-fpm  
$ /usr/local/opt/php54/sbin/php-fpm -D

重启nginx

$ nginx -s reload  

图片 2

运维服务端

网络通讯进度中,大概会出现分包和合包的情况。具体景况如

pack N是将数据转成了无符号3二个人的数字,那个刚好长度是5个字节,所以设定

communicationPack.php

<?php
//对数据信息封装
function packData($sendData,$packModel){
    return pack($packModel, strlen($sendData)).$sendData;
}

//解包
function unpackData($rcvData,$packModel){
    $length = $packModel=='N'?4:2;
    return substr($rcvData,$length);
}
package_body_offset=4
<?php
require_once 'communicationPack.php';
$packModel = 'N';
$client = new swoole_client(SWOOLE_SOCK_TCP);
$client->set(array(
    'open_length_check'     => true,
    'package_length_type'   => $packModel,
    'package_length_offset' => 0,       //第N个字节是包长度的值
    'package_body_offset'   => $packModel=='N'?4:2,       //第几个字节开始计算长度
    'package_max_length'    => 2000000,  //协议最大长度
));
//连接到服务器
if (!$client->connect('127.0.0.1', 9501, 0.5))
{
    die("connect failed.");
}
//向服务器发送数据
//数据协议
$sendData = "test123";
$sendData = packData($sendData,$packModel);
if (!$client->send($sendData))
{
    die("send failed.");
}
//从服务器接收数据
$data = $client->recv();
if (!$data)
{

    die("recv failed.");
}
echo unpackData($data,$packModel);
//关闭连接
$client->close();

相关文章