一聚教程网:一个值得你收藏的教程网站

热门教程

windows 中memcached安装配置与使用教程

时间:2022-06-30 18:00:02 编辑:袖梨 来源:一聚教程网

memcached软件下载安装教程

1、下载memcached软件压缩包,里面有32位和64位两个版本,选择你系统对应版本。解压放某个盘下面,比如在D:wampbin目录下

memcached软件下载:memcached.zip

2、在终端(CMD命令行)输入以下命令下:


memcached安装

①输入d:切换至D盘;
②输入cd wampbin切换至D:wampbin目录;
③输入dir查看当前目录下是否有memcached软件。
④输入:
memcached.exe -d install 安装
memcached.exe -d uninstall 卸载
memcached.exe -d stop 停止
memcached.exe -h 获取所有帮助
3、在启动之后连接:
D:wampbin> telnet 127.0.0.1 11211    –连接memcache端口11211使用quit退出。

memcached服务器CMD设置命令

启动Memcache 常用参数
-p 设置端口号(默认不设置为: 11211)
-U UDP监听端口(默认: 11211, 0 时关闭)
-l 绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)
-d 独立进程运行:
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 绑定使用指定用于运行进程
-m 允许最大内存用量,单位M (默认: 64 MB)
-P 将PID写入文件,可以使得后边进行快速进程终止,需要与-d 一起使用
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

Memcache的常用操作命令

• 5个常用的命令
– stats: 当前所有memcached服务器运行的状态信息
– add: 添加一个数据到服务器
– set: 替换一个已经存在的数据,如果数据不存在,则和add命令相同。
– get: 从服务器端提取指定的数据。
– delete: 删除指定的单个数据,如果要清除所有数据,可以使用flush_all指令。
 • Memcache的协议的错误部分主要是三个错误提示之提示指令:
– ERROR — 普通错误信息,比如指令错误之类的
– CLIENT_ERROR <错误信息> — 客户端错误
– SERVER_ERROR <错误信息> –服务器端错误
 
数据管理命令
• 格式:<命令> <键> <标记> <有效期> <数据长度>
其中:
– 命令:add(添加)、set(修改)、delete(删除)、get(获取)
– <键> -key,是发送过来指令的key内容
– <标记> – flags,是调用set指令保存数据时候的flags标记
– 有效期:是数据在服务器上的有效期限,如果是0,则数据永远有效,单位是秒
– 数据的长度,block data 块数据的长度,一般在这个个长度结束以后下一行跟着block data数据内容,
– 发送完数据以后,客户端一般等待服务器端的返回,服务器端的返回:
– STORED 数据保存成功
– NOT_STORED 数据保存失败,是因为服务器端这个数据key已经存在

PHP的memcache功能扩展模块安装

①把下载的php_memcache.dll文件放在PHP的扩展库目录下(PHP程序EXT目录下):

PHP的扩展库目录下
②在PHP.INI文件中加入“extension=php_memcache.dll”这句话,打开memcache.dll扩展库:
PHP.INI文件
③重启appache服务。
使用phpinfo()函数查看memcache.dll是否安装成功:
memcache.dll安装成功

PHP操作MemCache类的方法


Memcache类
Memcache::add ———— 增加一个条目到缓存服务器
Memcache::addServer ————向连接池中添加一个memcache服务器
Memcache::close ————关闭memcache连接
Memcache::connect ————打开一个memcached服务端连接
Memcache::decrement ————减小元素的值
Memcache::delete ————从服务端删除一个元素
Memcache::flush ————清洗(删除)已经存储的所有的元素
Memcache::get ————从服务端检回一个元素
Memcache::getExtendedStats ————缓存服务器池中所有服务器统计信息
Memcache::getServerStatus ———— 获取一个服务器的在线/离线状态
Memcache::getStats ———— 获取服务器统计信息
Memcache::getVersion ———— 返回服务器版本信息
Memcache::increment ———— 增加一个元素的值
Memcache::pconnect ———— 打开一个到服务器的持久化连接
Memcache::replace ———— 替换已经存在的元素的值
Memcache::set ————Store data at the server
Memcache::setCompressThreshold —————开启大值自动压缩
Memcache::setServerParams ————运行时修改服务器参数和状态
Memcache 函数memcache_debug ———— 转换调试输出的开/关

MemCache的实例应用

 代码如下 复制代码

//1. 创建对象
$mem = newMemcache();
//2. 添加服务器
$mem->addServer("192.168.150.250",11211);
$mem->addServer("192.168.150.138",11211);
$mem->addServer("192.168.112.128",11211);
//3. 放置信息
$mem->add("mystr","hello memcache!",MEMCACHE_COMPRESSED,0);
$mem->add("myarray",array(10,20,30,40),MEMCACHE_COMPRESSED,0);
$mem->add("myob",newStu(),MEMCACHE_COMPRESSED,0);
//4. 获取信息
echo $mem->get("mystr")."
";
var_dump($mem->get('myarray'));
echo "
";
$mem->get("myob")->getinfo();
?>

MemCache的实例应用

    //创建memcache对象
    $mem = new Memcache;
 
    //连接memcache服务器
    $mem -> connect("localhost", 11211);
 
    class Test {
        public $a=1;
        public $b=2;
        public $c=3;
    }
 
    $mem -> add("one", "this is memecache test!", MEMCACHE_COMPRESSED, time()+60*60*24*31);
    $mem -> add("two", array("111", "222", "3333"), MEMCACHE_COMPRESSED, 0);
    $mem -> add("three",new Test(), MEMCACHE_COMPRESSED, 0 );
    $mem -> add("four", 100, MEMCACHE_COMPRESSED, 0);
 
    $mem -> set("five", "this is a demo!", MEMCACHE_COMPRESSED, 1000);
 
    var_dump($mem->get("one"));
    echo '
';
 
    var_dump($mem->get("two"));
    echo '
';
 
    var_dump($mem->get("three"));
    echo '
';
 
    var_dump($mem->get("five"));
    echo '
';
 
    var_dump($mem->get("four"));
    echo '
';
 
    var_dump($mem->get(array("one", "five")));
    echo '
';
 
    $mem -> delete("one");
    $mem -> delete("two", 0);  
    $mem -> flush();
 
    $mem -> close();
?>

memcached服务器的安全防护


访问mysql数据库服务器时必须通过用户验证后才能进入,而访问memcached服务器则是直接通过客户端连接操作,没有任何验证过程。服务器如果直接暴漏在互联网上是非常危险的,轻则数据泄漏,重则服务器被入侵,还有可能存在一些未知的情况,所以危险性是可以预见的。为了安全起见,有以下两种方法:
1.内网访问
内网间的访问能够有效阻止其他非法的访问。如果让分布式的多个memcached服务器只在内部局域网中访问,需要设置Web服务器中的一块网卡在内网访问memcached服务器,Web服务器的另外一个网卡对外网。并在memcached服务器启动的时候就监听内网的IP地址和端口,memcached的启动选项使用如下所示:
memcached -d -m 1024 -u root –l 192.168.0.10 –p 11211 –c 1024 start
该命令设置memcached服务器在启动后监听内网的IP地址192.168.0.10,监听端口11211,占用1024MB内存,并且允许最大1024个并发连接。
2.设置防火墙
设置防火墙是简单有效的方式,如果memcached和Web Server在同一台机器上,或只要是有通过外网IP来访问memcached的情况就需要使用防火墙或者代理程序来过滤非法访问。一般在Linux系统下常用iptables来指定一些规则防止一些非法的访问。例如,设置只允许自己的Web服务器来访问我们的memcached服务器,同时组织其他的访问。防火墙iptables的规则设置如下所示:
iptables –F
iptables –P INPUT DROP
iptables –A INPUT –p tcp –s 192.168.0.10 –-dport 11211 –j ACCEPT
iptables –A INPUT –p udp –s 192.168.0.10 –-dport 11211 –j ACCEPT
上面的iptables规则只允许192.168.0.10这台Web服务器对memcached服务器的访问,能够阻止一些非法访问。当然也可以增加一些其他的规则来加强安全性,需要根据自己的需要来进行设置。


memcache实例应用——缓存数据库数据

在项目中最常见的MemCache应用,就是缓存从数据库中查询的数据结果,以及保存会话控制信息(session)。将数据库查询出来的结果使用memcached服务器进行缓存,以减少频繁的数据库连接及大量的查询对数据库造成的压力。设计的原则是只要数据库中的记录没有被改变,就不需要重新连接数据库并反复执行重复的查询语句,相同的查询结果都应该从缓存服务器中获取。memcache示例如下所示:

 代码如下 复制代码

    //创建memcache对象
    $mem = new Memcache;
 
    //连接memcache服务器
    $mem -> addServer("localhost", 11211);
    $mem -> addServer("192.168.1.137", 11211);
 
    //数据库的连接和操作
    $sql = "select id, name, pass, age, sex, email from users order by id";
 
    $key=md5($sql);
    //直接从内存memcahce要数据
    $data = $mem->get($key);
 
    //如果用数据就从内容中返回数据, 如果没有才连接数据库,执行SQL语句
    if(empty($data)) {
 
        //连接
        try {
            $pdo = new PDO("mysql:host=localhost;dbname=xsphp", "root", "123456");
        }catch(PDOException $e) {
            echo "数据库连接失败:".$e->getMessage();
        }
 
        //获取数据,执行查询语句
        $stmt = $pdo -> prepare($sql);
 
        $stmt -> execute();
 
        $data = $stmt -> fetchAll(PDO::FETCH_ASSOC);
 
        $mem -> set($key, $data, MEMCACHE_COMPRESSED, 10);
 
        echo "这是第一次访问从数据库获取的数据并放到了内存中!
";
    }
 
    echo '

';
    print_r($data);
    echo '
';
 
    //关闭连接
    $mem -> close();
 
?>

 

热门栏目