PHP 的 Memcached 扩展类的使用

准备工作

# 为了模拟分布式,需要起两个实例
kill -9 $(pidof memcached)

# 在实际项目中,需要使用 -l 命令来指定内网的 ip 地址和端口
/usr/local/memcached/bin/memcached -d start -u root -m 1024 -l 192.168.1.214:11211 -c 200 -P /tmp/memcached.11211.pid
/usr/local/memcached/bin/memcached -d start -u root -m 1024 -l 192.168.1.214:11311 -c 200 -P /tmp/memcached.11311.pid

代码

<?php
/*
    Memcached 类库
*/

// 在默认情况下,Memcached 实例在请求结束后就会被释放,但是可以通过传入参数 persistentId 来为每个 Memcached 实例指定唯一的 id,在请求间共享实例。
// 使用相同的 persistentId 创建的 Memcached 实例是共享一个 Memcached 链接的。
// 在同一个项目或者同一个模块会指定相同的 persistentId 来节约 Memcached 的链接和资源。
$persistentId = 'asdf';

$m = new Memcached($persistentId);

// 当服务器连接池为空,增加 host
if(!$m->getServerList()){
    // addservers 的第三个参数是“权重”,由于分布式算法是基于客户端的,设置权重是指定当前服务器被选中的概率
    $m->addservers([
        ['192.168.1.214', '11211', 70],
        ['192.168.1.214', '11311', 30],
    ]);
}

// 配置 Memcached
$m->setOptions([
        Memcached::OPT_PREFIX_KEY   => 'asdf',  // 可作为项目前缀
        Memcached::OPT_COMPRESSION  => false,   // 关闭压缩
    ]
);

$cas = Memcached::GET_EXTENDED;	// PHP7 的写法

// # 单个操作( set 方法和 get 方法)
// $m->set('k1', 'demo', time()+10);
// var_dump($m->get('k1', null, $cas), $cas);
// exit;

// # 批量操作( setMulti 方法和 getMulti 方法)
// $m->setMulti([
//    'k1' =>  'demo1',
//    'k2' =>  'demo2',
//    'k3' =>  'demo3',
//    'k4' =>  'demo4',
//    'k5' =>  'demo5',
//    'k6' =>  'demo6'
// ],time()+10);

// $result = $m->getMulti(['k1','k2','k3','k4','k5','k6'], $casTokenList);
// var_dump($result, $casTokenList);
// exit;

// # 并发处理方法(add 方法)
// if ($m->add('k0', 'add', time()+20)) {
//     echo '抢到位置';
// }else {
//     echo '已经被占用';
// }
// exit;

// # cas
// var_dump($m->get('k1', null, $cas), $cas);
// $m->cas($cas, 'k1', time(), time()+10);
// var_dump($m->get('k1', null, $cas), $cas);
// exit;

// # 自增自减 ( increment 和 decrement )
// $m->set('inc', 10);
// $result = $m->increment('inc', 10);
// var_dump($result);
// $result = $m->decrement('inc', 50);
// var_dump($result);
// exit;

// # append prepend(需要设置压缩 OPT_COMPRESSION 为 false)
// $m->set('app', '  ', time()+10);
// $m->prepend('app', 'hello');
// $m->append('app', 'memcached');
// var_dump($m->get('app', null, $cas), $cas);
// exit;

// $m->delete('k1');

// $m->flush(1);

关于批量操作( setMulti 方法和 getMulti 方法),登录服务器对分布式做了简单的验证,k1到k6的值分布在了两台服务器上。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值