<?php
echo '<pre>'; //测试的键值的数量
$count = 30;
$mem = create_memcache();
//var_dump($mem->isPersistent());
//var_dump($mem->isPristine());
//flush_data($mem);
//test_consistent_hash_set($mem, $count);
//test_consistent_hash_get($mem, $count);
//var_dump($mem->getServerList());
//var_dump($mem->getStats());
//检测memcache 权重匹配实现
//get_server_key_statistic(); function get_server_key_statistic() {
//memcahed 分布式
//测试 memcache 一致性hash 一台 memcahed 服务器宕机之后其他的键值存储问题还有添加一台服务器之后对之前的数据影响。
$stas = array();
for ($i = 1; $i <= 30; $i++) {
$key = 'item' . $i;
$arr = $mem->getServerByKey($key);
$port = $arr['port'];
if (!isset($stas[$port])) {
$stas[$port] = 1;
} else {
$stas[$port] = ++$stas[$port];
}
$server_key = $port . 'server_key';
$stas[$server_key][] = $key;
}
print_r($stas);
} /**
* 生成么memcache 对象
*/
function create_memcache() {
$mem = new Memcached('demo');
$server = array(
array('127.0.0.1', 11211, 20),
array('127.0.0.1', 11212, 20),
array('127.0.0.1', 11213, 20),
array('127.0.0.1', 11214, 20),
array('127.0.0.1', 11215, 20),
);
if (!count($mem->getServerList())) {
$mem->addServers($server);
//Socket reading timeout, in microseconds. In cases where you cannot use non-blocking I/O this will allow you to still have timeouts on the reading of data.
$mem->setOption(Memcached::OPT_RECV_TIMEOUT, 1000);
$mem->setOption(Memcached::OPT_SEND_TIMEOUT, 1000);
$mem->setOption(Memcached::OPT_TCP_NODELAY, true);
$mem->setOption(Memcached::OPT_SERVER_FAILURE_LIMIT, 50);
$mem->setOption(Memcached::OPT_CONNECT_TIMEOUT, 500);
$mem->setOption(Memcached::OPT_RETRY_TIMEOUT, 300);
$mem->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true);
$mem->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$mem->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);
$mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
}
return $mem;
} /**
* 测试一致性hash
*/
function test_consistent_hash_set($mem, $count) {
//memcahed 分布式
//测试 memcache 一致性hash 一台 memcahed 服务器宕机之后其他的键值存储问题还有添加一台服务器之后对之前的数据影响。
$stats = array();
for ($i = 1; $i <= $count; $i++) {
$server_key = 'item' . $i;
$arr = $mem->getServerByKey($server_key);
$val = create_rand_str(6);
$key = $i;
$mem->setByKey($server_key, $key, $val);
$port = $arr['port'];
if (!isset($stats[$port])) {
$stats[$port] = 1;
} else {
$stats[$port] = ++$stats[$port];
}
$server_key_val = $port . 'server_info';
$val_key_val = $port . 'val_info';
$stats[$server_key_val][] = $server_key;
$md5_key = md5($key);
$stats[$val_key_val][] = "{$md5_key}=>{$val}";
}
print_r($stats);
} function create_rand_str($length) {
$randstr = '';
for ($i = 0; $i < $length; $i++) {
$randstr .= chr(mt_rand(33, 126));
}
return $randstr;
} /**
* 测试memcache get
*/
function test_consistent_hash_get($mem, $count) {
for ($i = 1; $i <= $count; $i++) {
$server_key = 'item' . $i;
$key = $i;
$result = $mem->getByKey($server_key, $key);
$server_info = $mem->getServerByKey($server_key);
var_dump($server_info);
exit;
$port = $server_info['port'];
$weight = $server_info['weight'];
if ($result !== FALSE) {
echo "server info : 服务器端口:{$port} 权重:{$weight}, {$server_key}——{$key}=>{$result}<br>";
}
}
} /**
* 清除数据
*/
function flush_data($mem) {
$mem->flush();
}

基于 libmemcahce 的memcache 操作的更多相关文章

  1. memcached基于socket访问memcache缓存服务器

    memcached基于socket访问memcache缓存服务器 操作memcache常用三种方法: .memcache基于php_memcache.dll扩展(php扩展) .memcached基于 ...

  2. 基于 php-redis 的redis操作

    基于 php-redis 的redis操作 林涛 发表于:2016-5-13 12:12 分类:PHP 标签:php,php-redis,redis 203次 redis的操作很多的,下面的例子都是基 ...

  3. 一个基于PDO的数据库操作类(新) 一个PDO事务实例

    <?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...

  4. memcache 操作类

    <?php /** * memcache 操作实现 * @author timeless */ class Memcache_manage { //CI原始的信息 private $_ci; p ...

  5. AngularJS基于MVC的复杂操作案例

    AngularJS基于MVC的复杂操作案例 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

  6. 从基于 SQL 的 CURD 操作转移到基于语义 Web 的 CURD 操作

    中文名称 CURD 含义 数据库技术中的缩写词 操作对象 一般的项目开发的各种参数 作用 用于处理数据的基本原子操作     它代表创建(Create).更新(Update).读取(Retrieve) ...

  7. 基于gtid复制主要操作记录

    基于gtid复制主要操作记录 一.安装系统依赖包 在主从上都要安装该依赖包. yum -y install perl-DBI yum -y install perl-DBD-MySQL yum -y ...

  8. 基于iTextSharp的PDF操作(PDF打印,PDF下载)

    基于iTextSharp的PDF操作(PDF打印,PDF下载) 准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成P ...

  9. 基于 Redis 实现 CAS 操作

    基于 Redis 实现 CAS 操作 Intro 在 .NET 里并发情况下我们可以使用 Interlocked.CompareExchange 来实现 CAS (Compare And Swap) ...

随机推荐

  1. [CF 351B]Jeff and Furik[归并排序求逆序数]

    题意: 两人游戏, J先走. 给出一个1~n的排列, J选择一对相邻数[题意!!~囧], 交换. F接着走, 扔一硬币, 若正面朝上, 随机选择一对降序排列的相邻数, 交换. 若反面朝上, 随机选择一 ...

  2. JavaScript实现简单的打印功能

    var printSetup = function(){ // 打印页面设置 wb.execwb(8,1); }; var printPreView = function(){ // 打印页面预览 w ...

  3. CSS3新特性(阴影、动画、渐变、变形、伪元素等)

    CSS3与页面布局学习总结(六)--CSS3新特性(阴影.动画.渐变.变形.伪元素等)   目录 一.阴影 1.1.文字阴影 1.2.盒子阴影 二.背景 2.1.背景图像尺寸 2.2.背景图像显示的原 ...

  4. NIO组件Selector工作机制详解(上)

    转自:http://blog.csdn.net/haoel/article/details/2224055 一.  前言 自从J2SE 1.4版本以来,JDK发布了全新的I/O类库,简称NIO,其不但 ...

  5. Doctor NiGONiGO’s multi-core CPU(最小费用最大流模板)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=693 题意:有一个 k 核的处理器和 n 个工作,全部的工作都须要在一个核上处理一个单位的 ...

  6. Javascript --扩展String实现替换字符串中index处字符

    String.prototype.replaceCharAt = function(n,c){ return this.substr(0, n)+ c + this.substr(n+1,this.l ...

  7. java Map实现的cache manager

    一个模仿memcached的JAVA虚拟缓存工具,可以缓存java对象 import java.io.ByteArrayInputStream; import java.io.ByteArrayOut ...

  8. myeclipse一些技巧

    ctrl+h-----------------查找字符串 ctrl+A 全选→ctrl+shift+f 代码格式化,排版 ctrl+shift+O  自动引用

  9. [转] Creating a Simple RESTful Web App with Node.js, Express, and MongoDB

    You can find/fork the sample project on GitHub Hey! This and all my other tutorials will soon be mov ...

  10. Java基础知识强化05:不借助第三个变量实现两个变量互换

    1. 不借助第三个变量实现两个变量互换 代码如下: package himi.hebao; /** * 不借助第三个变量实现,两个变量互换 * 这里利用^异或实现两个变量的互换 * @author A ...