直接上代码
配置文件memcache_cfg.php
这里我只开启是三个port
<?php
$memcache_config = array(
'mem_server000' => array(
'host' => '127.0.0.1',
'port' => 11211
),
'mem_server121' => array(
'host' => '127.0.0.1',
'port' => 11212
),
'mem_server121' => array(
'host' => '127.0.0.1',
'port' => 11213
)
);
运行文件 index.php
<?php
@header("content-Type: text/html; charset=utf-8");
require_once('./memcache_cfg.php');
class Mem_Host{
private $host_ser = [];
private $_m_server = [];
private $memcache_config ;
// private $mem = new class{};
function __construct($memcache_config) {
$this ->memcache_config = $memcache_config;
$this->mem = new Memcache;
// 增加 服务器虚拟点
$this->host_ser = array_keys($memcache_config);
$this->_m_server = [];
foreach ($this->host_ser as $key => $value) {
for ($i=0; $i < 5 ; $i++) {
$this->_m_server[sprintf("%u", crc32($value.$i))] = $value;
}
}
// 排序点 让他们分布开(错开)
ksort($this->_m_server);
$this->mem->_node = $this->_m_server;
}
// // 添加 相应的内容到对应的 memcache服务器
public function add_node_mem($key_node , $val_node){
// 获取当前key 值得位置
$key_mem_node = sprintf("%u" , crc32($key_node));
$val_mem_val = $val_node;
// var_dump($mem->_node);die;
$keys = array_keys($this->mem->_node);
// 判断 存放位置 默认存放0号位
$default_key = $keys[0];
foreach ($keys as $key => $val){
if($key_mem_node < $val){
$default_key = $val ;
break;
}
}
$this->mem ->connect($this->memcache_config[$this->mem->_node[$default_key]]['host'], $this->memcache_config[$this->mem->_node[$default_key]]['port']);
// 设置过期时间 添加键/更新键
$this->mem ->set ($default_key , $val_mem_val,0,10);
$this->mem->close();
// echo '当前的服务器是 host:'.$this->memcache_config[$this->mem->_node[$default_key]]['host'] .', 当前的端口是 port:' .$this->memcache_config[$this->mem->_node[$default_key]]['port'] ;
}
// print_r($mem->_node);
public function get_node_mem($key_node){
$key_mem_node = sprintf("%u" , crc32($key_node));
$keys = array_keys($this->mem->_node);
// 判断 存放位置
$default_key = $keys[0];
foreach ($keys as $key => $val){
if($key_mem_node < $val){
$default_key = $val ;
break;
}
}
$this->mem ->connect($this->memcache_config[$this->mem->_node[$default_key]]['host'], $this->memcache_config[$this->mem->_node[$default_key]]['port']);
$res = $this->mem ->get ($default_key);
$this->mem->close();
return $res;
}
}
$Mem = new Mem_Host($memcache_config);
// $Mem ->add_node_mem('name' , 'lily');
// $Mem ->add_node_mem('name232' , 'lily');
// $Mem ->add_node_mem('name1212' , 'lily');
echo $Mem ->get_node_mem('name232');
?>
以上就是我自己手写的一个demo ,希望大佬给点建议 ,初学memcached 对其不是特别了解!
谢谢!