memcache基本讲解

Memcached技术php

 

介绍:html

memcached是一种缓存技术他能够把你的数据放入内存,从而经过内存访问提速,由于内存最快的, memcached技术的主要目的提速,java

memachec 中维护了一张大的hashtable表 ,该表是在内存,表的结构是mysql

key    valuelinux

字串  (字串,数值,数组,对象,布尔,二进制数据,nullajax

 

原理说明:redis

 

 

 

u 安装并使用memcached算法

安装步骤sql

(1) 下载memcached软件数据库

(2) 安装

进入cmd ,切换到 memcached.exe 文件所在目录

memcached.exe –d install

(3) 启动memcached

第一种,能够到服务点击启动

第二种命令行

memcached.exe –m 200MB –d start  【以deamon方式启动,默认64M

 

若是你在启动时,win7启动不成功则可使用以下方法

memcached.exe –p 端口号

 

启动方法不要关闭控制台.

 

端口号的范围 : 0-65535  , 由于端口号是用两个字节来表示

有名端口: 0-1024 已经用程序使用 , apache 80  , mysql 3306 , ftp 21 , ssh 22

oracle: 1521, stmp: 25 

 

使用netstat –an 若是看到 11211端口在监听,说明启动ok

netstat –anb 是哪一个程序监听这个指令还能够看到有哪些用户链接到咱们的服务器.

 

若是没有安装好,缘由可能

  1. 若是你是win7, win7对安全性高,全部,必须以adminstartor 身份来安装.

你切换成adminstrator , 去安装,在启动

  1. 你的memcached.exe 目录有中文,或特殊字符保证目录没有中文和特殊字符.

 

(4) 准备研究若是对memcached进行curd操做.

 

 

 

看看telnet如何操做 (curd

 

  1. 登陆到telnet链接到 memcached服务

telnet 127.0.0.1  11211

 

若是大家不能使用telnet 是由于系统不存在 telnet.exe , 就能够到其它机器上拷贝 telnet.exe 放在 c:\windows\system32 便可

  1. 增长

基本语法是:

add key名 存放时间(数据大小(字符)

举例:

add key1 0 30 5

 

  1. 如何获取

基本语法是:

get key

get key1

  1. 修改

 

set key名 存放时间 数据大小.

 

举例:

set key1 0 40 5

☞ 若是key1不存在,则至关于增长新,若是存在,则至关有替换

 

replace key名 存放时间 数据大小

replace key1 0 40 5

☞ 若是key1不存在,则失败,这个指令要求key必须存在.

 

  1. 删除

基本语法是

delete key

好比

delete key1

 

append

Append data to existing key

append key 0 60 15

prepend

Prepend data to existing key

prepend key 0 60 15

 

 

flush_all 能够统一把数据清空.

 

 

这里主要你们能够去计算出命中率 cmd_hits/cmd_get . 越高越好.

 

 

 

 

u 如何使用php程序操做咱们的memcached服务 curd.

步骤,准备工做.

(1) 把 php_memcache.dll 文件拷贝 phpext 

☞ 不一样版本的php 所使用的 php_memcache.dll 的版本不同

(2) 修改php.ini文件,加载 php_memcache.dll (该文件就是封装了一堆函数)

;加载php_memcache.dll 文件

extension=php_memcache.dll

(3) 从新启动apache

(4) 咱们写程序来完成curd操做.

 

细节在咱们添加数据的时候,若是 

bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )

若是报 expire 设为表示,永不过时.(只要memcache不从新启动,就永远在mem)

exprie 直接给的是秒数,则最大 30*3600*24

若是你但愿保持时间超过30  time()+天数*3600*24 便可

 

最后代码:

mem1.php 

 

<?php

 

    //建立一个mem对象实例

$mem=new Memcache;

     

if(!$mem->connect("127.0.0.1",11211)){

die('链接失败!');

}

 

//增长

 

//1.增长一个字串

/* if($mem->set('key1',"beijing",MEMCACHE_COMPRESSED,60)){

 

echo '添加ok';

}*/

 

//2.添加数值

/* if($mem->set('key1',100,MEMCACHE_COMPRESSED,60)){

 

echo '添加ok';

}*/

 

//3.添加数组

//在添加数组是,根据须要但愿序列号放入  ,

//serialize<=>unserialize, 若是根据须要,也能够json_encode <=> json_decode

$arr=array("bj",'tj');

if($mem->set('key1',$arr,MEMCACHE_COMPRESSED,time()+31*3600*24)){

 

echo '添加数组ok99111';

}

//4.添加对象

/* class Dog{

public $name;

public $age;

public function __construct($name,$age){

$this->name=$name;

$this->age=$age;

}

}

 

$dog1=new Dog('小狗',50);

if($mem->set('key1',$dog1,MEMCACHE_COMPRESSED,60)){

 

echo '添加对象ok';

}*/

 

//5.添加null 布尔值

/* if($mem->set('key1',false,MEMCACHE_COMPRESSED,60)){

 

echo '添加布尔ok';

}*/

 

//6. 资源类型放入.

/* $con=mysql_connect("127.0.0.1","root","root");

if(!$con){

die('链接数据库失败');

}

var_dump($con);

echo "<br/>";

if($mem->set('key1',$con,MEMCACHE_COMPRESSED,60)){

 

echo '添加资源ok';

}*/

 

 

//查询

 

$val=$mem->get('key1');

 

var_dump($val);

 

//修改

//可使用replace

if($mem->replace("key11",'hello',MEMCACHE_COMPRESSED,60)){

echo 'replace ok';

}else{

echo 'replace no ok';

}

 

 

 

//删除

echo "<br/>";

if($mem->delete('key14')){

echo 'key14 删除';

}else{

echo 'key14不存在';

}

 

 

mem2.php

 

<?php

 

 

 

 

//这个文件去操做memcached服务

 

 //建立一个mem对象实例

$mem=new Memcache;

     

if(!$mem->connect("127.0.0.1",11211)){

die('链接失败!');

}

 

//在另外文件中取出对象时,有个注意的地方,对应php5.2这个版本会提示错误,

//php5.3这个版本会提示 incomplete 信息解决方法是声明类定义便可

 

class Dog{

public $name;

public $age;

public function __construct($name,$age){

$this->name=$name;

$this->age=$age;

}

}

 

$dog=$mem->get('key1');

 

var_dump($dog);

 

test.php 说明serilize 和 json_encode用法:

//何时使用serilize 何时使用json_encode [ajax配合]

 

 

 

 

练习请你们使用php 程序 memcache.dll 完成对memcahce增删改查

20min 

 

u 如何使用PHP源码来操做memcached服务

若是管理员不让咱们去加载 memcache.dll 文件,咱们能够直接经过源码操做.

 

关闭扩展.

 

代码mem3.php

<?php

 

 require_once 'memcached-client.php';

  

  $mc = new memcached(array(

               'servers' => array('127.0.0.1:11211'), //链接的memcacheip和端口

               'debug'   => false, //是否debug

               'compress_threshold' => 10240, /*最大压缩*/

               'persistant' => true)); /*是不是持久链接*/

 

 

  $mc->set('key1', array('some', 'array'));

 // $mc->replace('key', 'some random string');

 

  $val = $mc->get('key1');

var_dump($val);

//修改

$mc->replace('key1', "北京");

$val = $mc->get('key1');

 

var_dump($val);

//删除

$mc->delete('key1');

  $val = $mc->get('key1');

echo "删除后";

var_dump($val);

 

 

u Memcached 机制的深刻了解

 

 

 

 

③ , memcache的数据是放入到内存,而且在数据爆满的状况下,使用LRU 算法删除

 

 

写段代码说明: mem4.php

 

 

mem5.php 取出.

 

 

总结:

  1. mem服务的数据不是同步数据是分布的
  2. 把什么数据放入到哪一个memcached是由客户端的mem对象决定
  3. 当执行addServer的时候,并非当即去链接mem服务,而是经过计算,hash后才去决定链接哪一个mem服务,所以当你大量加入服务器到链接池,没有多余开销

 

u memcache的细节讨论

① 生命周期

从数据放入mem开始计时,直到时间到了,就销毁若是时间为0, 则表示不过时.

memcache的数据被销毁的状况以下:

  1. 时间到
  2. 重启memcached服务
  3. 重启memcached服务所在的机器
  4. delete / flush 销毁数据

② 如何把session数据放入到memcached服务中.

步骤:

  1. 修改php.ini的配置文件

以下:

;[sesson.save_handler user|files|memcache]

session.save_handler = memcache

session.save_path = "tcp://127.0.0.1:11211"

③ 测试一把,重启apache

测试ok 

<?php

 

//传统的代码

session_start();

$_SESSION['name']='天龙八部300';

$_SESSION['city']='beijing';

class Dog{

public $name;

}

 

$dog1=new Dog;

$dog1->name='abcde';

$_SESSION['dog']=$dog1;

 

//若是session数据入mem,那他必定是以session_id

//key值进行添加

 

//取出

$name=$_SESSION['name'];

echo "name=$name";

echo "sessionid=".session_id();

 

 

u 思考,若是管理员,不让咱们修改 php.ini 文件,咱们如何处理sessionmemcached这个功能咱们经过一个函数能够去修改 php.ini 的配置.

 

代码:

<?php

 

ini_set("session.save_handler","memcache");

ini_set("session.save_path","tcp://127.0.0.1:9999");

 

同时你也能够经过 ini_set 去动态的修改对php.ini 的其它设置 。可是他不影响其它php页面,也不会去修改php.ini 文件自己只对本页面生效.

 

u memcached vs session比较

memcached 主要的目的是提速 ,所以它是一种无状态的数据.即,数据不和用户绑定.

session数据是和绑定的,所以是一种有状态数据.

 

u memached安全性

如何使用memcached 服务才是安全的.

 

windows下经过启用防火墙来保护咱们的memcached,原理图:

 

 

linux 也可使用防火墙.

setup 配置防火墙

iptables -a input -p tcp -s 127.0.0.1 -dport 11211 -j ACCEPT

 

u 什么样的数据适合放入memcached?

 

memcached技术相似是redis (key/value数据库)

 

课后练习:

这个这个

 

这个练习主要是让你们去练习crud的操做.

 

 

 

详细讲解:http://blog.csdn.net/pi9nc/article/details/17317231

 

初始化:memcache 

static {  
        String[] serverlist = { "server1.com:port", "server2.com:port" };  
   
        SockIOPool pool = SockIOPool.getInstance();  
        pool.setServers(serverlist);  
        pool.initialize();  
 }

  建立一个client对象: 

MemCachedClient mc = new MemCachedClient(); 

  建立一个缓存: 

MemCachedClient mc = new MemCachedClient();  
 String key = "cacheKey1";  
 Object value = SomeClass.getObject();  
 mc.set(key, value);  

  经过key删除一个缓存: 

MemCachedClient mc = new MemCachedClient();  
 String key = "cacheKey1";  
 mc.delete(key);

  经过key获取缓存对象: 

MemCachedClient mc = new MemCachedClient();  
 String key = "key";  
 Object value = mc.get(key);  

  获取多个缓存对象: 

MemCachedClient mc = new MemCachedClient();  
 String[] keys = { "key", "key1", "key2" };  
 Map<Object> values = mc.getMulti(keys); 

  刷新所有缓存: 

MemCachedClient mc = new MemCachedClient();  
 mc.flushAll(); 

  

7、            Memcached客户端程序

Memcached的java客户端已经存在三种了:

?  官方提供的基于传统阻塞io由Greg Whalin维护的客户端

?  Dustin Sallings实现的基于java nio的Spymemcached

?  XMemcached


1. 三种API比较 
1)      memcached client for java

较早推出的memcached JAVA客户端API,应用普遍,运行比较稳定。


2)      spymemcached

A simple, asynchronous, single-threaded memcached client written in java. 支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,可是稳定性很差,测试中常报timeOut等相关异常。


3)      xmemcached

XMemcached一样是基于java nio的客户端,java nio相比于传统阻塞io模型来讲,有效率高(特别在高并发下)和资源耗费相对较少的优势。传统阻塞IO为了提升效率,须要建立必定数量的链接造成链接池,而nio仅须要一个链接便可(固然,nio也是能够作池化处理),相对来讲减小了线程建立和切换的开销,这一点在高并发下特别明显。所以XMemcached与Spymemcached在性能都很是优秀,在某些方面(存储的数据比较小的状况下)Xmemcached比Spymemcached的表现更为优秀,具体能够看这个Java Memcached Clients Benchmark。


2.  建议

因为memcached client for java发布了新版本,性能上有所提升,而且运行稳定,因此建议使用memcached client for java。

XMemcached也使用得比较普遍,并且有较详细的中文API文档,具备以下特色:高性能、支持完整的协议、支持客户端分布、容许设置节点权重、动态增删节点、支持JMX、与Spring框架和Hibernate-memcached的集成、客户端链接池、可扩展性好等。

下面给出这三种客户端的示例程序。


3.  示例程序
1)      memcached client for java

从前面介绍的Java环境的Memcached客户端程序项目网址里,下载最新版的客户端程序包:java_memcached-release_2.5.1.zip,解压后,文件夹里找到java_memcached-release_2.5.1.jar,这个就是客户端的JAR包。将此JAR包添加到项目的构建路径里,则项目中,就可使用Memcached了。

示例代码以下:

package temp;

 

import com.danga.MemCached.*;

import org.apache.log4j.*;

 

public class CacheTest {

    public static void main(String[] args) {

       /**

        * 初始化SockIOPool,管理memcached的链接池

        * */

       String[] servers = { "10.11.15.222:10000" };

       SockIOPool pool = SockIOPool.getInstance();

       pool.setServers(servers);

       pool.setFailover(true);

       pool.setInitConn(10);

       pool.setMinConn(5);

       pool.setMaxConn(250);

       pool.setMaintSleep(30);

       pool.setNagle(false);

       pool.setSocketTO(3000);

       pool.setAliveCheck(true);

       pool.initialize();

      

       /**

        * 创建MemcachedClient实例

        * */

       MemCachedClient memCachedClient = new MemCachedClient();

       for (int i = 0; i < 1000; i++) {

           /**

            * 将对象加入到memcached缓存

            * */

           boolean success = memCachedClient.set("" + i, "Hello!");

           /**

            * 从memcached缓存中按key值取对象

            * */

           String result = (String) memCachedClient.get("" + i);

           System.out.println(String.format("set( %d ): %s", i, success));

           System.out.println(String.format("get( %d ): %s", i, result));

       }

    }

}

  2)      spymemcached

spymemcached当前版本是2.5版本,官方网址是:http://code.google.com/p/spymemcached/。能够从地址:http://spymemcached.googlecode.com/files/memcached-2.5.jar下载最新版原本使用。

示例代码以下:

package temp;

 

import java.net.InetSocketAddress;

import java.util.concurrent.Future;

 

import net.spy.memcached.MemcachedClient;

 

public class TestSpyMemcache {

    public static void main(String[] args) {

       // 保存对象

       try {

           /* 创建MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */

           MemcachedClient mc = new MemcachedClient(new InetSocketAddress("10.11.15.222", 10000));

           Future<Boolean> b = null;

           /* 将key值,过时时间(秒)和要缓存的对象set到memcached中 */

           b = mc.set("neea:testDaF:ksIdno", 900, "someObject");

           if (b.get().booleanValue() == true) {

              mc.shutdown();

           }

       } catch (Exception ex) {

           ex.printStackTrace();

       }

       // 取得对象

        try {

           /* 创建MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */

           MemcachedClient mc = new MemcachedClient(new InetSocketAddress("10.11.15.222", 10000));

           /* 按照key值从memcached中查找缓存,不存在则返回null */

           Object b = mc.get("neea:testDaF:ksIdno");

           System.out.println(b.toString());

           mc.shutdown();

       } catch (Exception ex) {

           ex.printStackTrace();

       }

    }

}

  3)      xmemcached

Xmemcached的官方网址是:http://code.google.com/p/xmemcached/,能够从其官网上下载最新版本的1.2.4来使用。地址是:http://xmemcached.googlecode.com/files/xmemcached-1.2.4-src.tar.gz

示例代码以下:

package temp;

 

import java.io.IOException;

import java.util.concurrent.TimeoutException;

 

import net.rubyeye.xmemcached.utils.AddrUtil;

import net.rubyeye.xmemcached.MemcachedClient;

import net.rubyeye.xmemcached.MemcachedClientBuilder;

import net.rubyeye.xmemcached.XMemcachedClientBuilder;

import net.rubyeye.xmemcached.exception.MemcachedException;

 

public class TestXMemcache {

    public static void main(String[] args) {

       MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil

              .getAddresses("10.11.15.222:10000"));

       MemcachedClient memcachedClient;

       try {

           memcachedClient = builder.build();

      

           memcachedClient.set("hello", 0, "Hello,xmemcached");

           String value = memcachedClient.get("hello");

           System.out.println("hello=" + value);

           memcachedClient.delete("hello");

           value = memcachedClient.get("hello");

           System.out.println("hello=" + value);

           // close memcached client

           memcachedClient.shutdown();

       } catch (MemcachedException e) {

           System.err.println("MemcachedClient operation fail");

           e.printStackTrace();

       } catch (TimeoutException e) {

           System.err.println("MemcachedClient operation timeout");

           e.printStackTrace();

       } catch (InterruptedException e) {

           // ignore

       }catch (IOException e) {

           System.err.println("Shutdown MemcachedClient fail");

           e.printStackTrace();

       }

    }

}

  

(八)  64位机器安装Memcache
1.   安装

在64位的机器上安装Memcache和在32位的机器上安装的操做是同样的。在安装的过程当中,可使用以下的命令来查看安装是否成功,以进行确认。

1)   确认libevent安装

查看libevent是否安装成功:

# ls -al /usr/lib | grep libevent

在命令行出现以下信息,代表安装成功:

   lrwxrwxrwx   1 root root     21 Mar 22 18:41 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3

   -rwxr-xr-x   1 root root 262475 Mar 22 18:41 libevent-1.2.so.1.0.3

   -rw-r--r--   1 root root 430228 Mar 22 18:41 libevent.a

   -rwxr-xr-x   1 root root    811 Mar 22 18:41 libevent.la

   lrwxrwxrwx   1 root root     21 Mar 22 18:41 libevent.so -> libevent-1.2.so.1.0.3

2)   确认memcache安装

查看memcache是否安装成功:

# ls -al /usr /bin/mem*

在命令行出现以下信息,代表安装成功:

   -rwxr-xr-x  1 root root 114673 Mar 22 18:52 /usr/local/src/memcached

   -rwxr-xr-x  1 root root 120092 Mar 22 18:52 /usr/local/src/memcached-debug

2.   64位的问题及修复
1)   问题

安装完成了,如今咱们看一下memcache的帮助:

#/usr/local/src/memecached -h

这时候出现了以下错误:

   memcached: error while loading shared libraries: libevent-1.2.so.1: cannot open shared    object file: No such file or directory

2)   修复

下面说下修复过程:

#LD_DEBUG=libs memcached -v #查看memcached的libs的路径

在命令上出现了以下信息:

5427:     find library=libevent-1.2.so.1 [0]; searching

5427:      search cache=/etc/ld.so.cache

5427: search        path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:

/usr/lib64              (system search path)

5427:       trying file=/lib64/tls/x86_64/libevent-1.2.so.1

5427:       trying file=/lib64/tls/libevent-1.2.so.1

5427:       trying file=/lib64/x86_64/libevent-1.2.so.1

5427:       trying file=/lib64/libevent-1.2.so.1

5427:       trying file=/usr/lib64/tls/x86_64/libevent-1.2.so.1

5427:       trying file=/usr/lib64/tls/libevent-1.2.so.1

5427:       trying file=/usr/lib64/x86_64/libevent-1.2.so.1

5427:       trying file=/usr/lib64/libevent-1.2.so.1

5427:            memcached: error while loading shared libraries: libevent-1.2.so.1: cannot open shared object file: No such                   file or directory

如今应该记录下来libs的位置,我选择的是trying file=/usr/lib64/libevent-1.2.so.1,如今咱们利用这个来作个符号连接:

# ln -s /usr/lib/libevent-1.4.so.2 /usr/lib64/libevent-1.4.so.2

下面咱们继续使用memcached -h作下测试,终于出现了以下信息:

    memcached 1.2.0

    -p <num>      port number to listen on

    -s <file>     unix socket path to listen on (disables network support)

    -l <ip_addr>  interface to listen on, default is INDRR_ANY

    -d            run as a daemon

    -r            maximize core file limit

    -u <username> assume identity of <username> (only when run as root)

    -m <num>      max memory to use for items in megabytes, default is 64 MB

    -M            return error on memory exhausted (rather than removing items)

    -c <num>      max simultaneous connections, default is 1024

    -k            lock down all paged memory

    -v            verbose (print errors/warnings while in event loop)

    -vv           very verbose (also print client commands/reponses)

    -h            print this help and exit

    -i            print memcached and libevent license

    -b            run a managed instanced (mnemonic: buckets)

    -P <file>     save PID in <file>, only used with -d option

    -f <factor>   chunk size growth factor, default 1.25

    -n <bytes>    minimum space allocated for key+value+flags, default 48

说明memcached安装成功。(应该是机器是64位的缘由,因此将so文件放到了lib64下面,而不是lib下面,使得memcached找不到了so文件)。

下面,咱们来启动一个Memcached的服务器端:

# /usr/local/src/memcached -d -m 10  -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid

 

(九)    Windows下的Memcache安装
1.  安装

在这里简单介绍一下Windows下的Memcache的安装:

1. 下载memcache的windows稳定版,解压放某个盘下面,好比在c:\memcached

2. 在终端(也即cmd命令界面)下输入‘c:\memcached\memcached.exe -d install’安装

3. 再输入:‘c:\memcached\memcached.exe -d start’启动。NOTE: 之后memcached将做为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。


2.  memcached的基本设置

?  -p 监听的端口

?  -l 链接的IP地址, 默认是本机

?  -d start 启动memcached服务

?  -d restart 重起memcached服务

?  -d stop|shutdown 关闭正在运行的memcached服务

?  -d install 安装memcached服务

?  -d uninstall 卸载memcached服务

?  -u 以的身份运行 (仅在以root运行的时候有效)

?  -m 最大内存使用,单位MB。默认64MB

?  -M 内存耗尽时返回错误,而不是删除项

?  -c 最大同时链接数,默认是1024

?  -f 块大小增加因子,默认是1.25

?  -n 最小分配空间,key+value+flags默认是48

?  -h 显示帮助


3.  设置Memcache缓存大小和端口

Memcache的默认启动时的参数可能不知足实际生产环境的须要,因而就想到直接修改windows服务的启动参数,操做以下:

打开注册表,找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server

其中的ImagePath项的值为: c:\memcached\memcached.exe" -d runservice

改为:c:\memcached\memcached.exe" -p 12345 -m 128 -d runservice

其中,-p就是端口,-m就是缓存大小,以M为单位。

在CentOS 5.6上编译安装Memcached

一、因为memcached是基于libevent的,所以须要安装libevent,libevent-devel

view plain    copy
  1. # yum install libevent libevent-devel -y 

二、下载并解压memcached-1.4.5

memcached官方网站是:http://memcached.org/

view plain    copy
  1. # cd /root 
  2. # wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz 
  3. # tar -xvzf  memcached-1.4.5.tar.gz 

三、编译安装memcached-1.4.5

view plain    copy
  1. # cd memcached-1.4.5 
  2. # ./configure --prefix=/etc/memcached 
  3. # make 
  4. # make install 

四、配置环境变量

进入用户宿主目录,编辑.bash_profile,为系统环境变量LD_LIBRARY_PATH增长新的目录,须要增长的内容以下:

# vi .bash_profile

view plain    copy
  1. MEMCACHED_HOME=/etc/memcached 
  2. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MEMCACHED_HOME/lib 

刷新用户环境变量:# source .bash_profile

五、编写memcached服务启停脚本

# cd /etc/init.d

vi memcached,脚本内容以下:

#!/bin/sh 
# 
# Startup script for the server of memcached 
# 
# processname: memcached 
# pidfile: /etc/memcached/memcached.pid 
# logfile: /etc/memcached/memcached_log.txt 
# memcached_home: /etc/memcached 
# chkconfig: 35 21 79 
# description: Start and stop memcached Service 
 
# Source function library 
. /etc/rc.d/init.d/functions 
 
RETVAL=0 
 
prog="memcached" 
basedir=/etc/memcached 
cmd=${basedir}/bin/memcached 
pidfile="$basedir/${prog}.pid" 
#logfile="$basedir/memcached_log.txt" 
 
# 设置memcached启动参数 
ipaddr="192.168.1.201"          # 绑定侦听的IP地址 
port="11211"                    # 服务端口 
username="root"                 # 运行程序的用户身份 
max_memory=64                   # default: 64M | 最大使用内存 
max_simul_conn=1024             # default: 1024 | 最大同时链接数 
#maxcon=51200 
#growth_factor=1.3              # default: 1.25 | 块大小增加因子 
#thread_num=6                   # default: 4 
#verbose="-vv"                  # 查看详细启动信息 
#bind_protocol=binary           # ascii, binary, or auto (default) 
 
start() { 
    echo -n $"Starting service: $prog" 
    $cmd -d -m $max_memory -u $username -l $ipaddr -p $port -c $max_simul_conn -P $pidfile 
    RETVAL=$? 
    echo 
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog 
} 
 
stop() { 
    echo -n $"Stopping service: $prog  " 
    run_user=`whoami` 
        pidlist=`ps -ef | grep $run_user | grep memcached | grep -v grep | awk '{print($2)}'` 
        for pid in $pidlist 
        do 
#           echo "pid=$pid" 
            kill -9 $pid 
            if [ $? -ne 0 ]; then 
                return 1 
            fi 
        done 
    RETVAL=$? 
    echo 
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog 
} 
 
# See how we were called. 
case "$1" in 
    start) 
        start 
        ;; 
    stop) 
        stop 
        ;; 
    #reload) 
    #    reload 
    #    ;; 
    restart) 
        stop 
        start 
        ;; 
    #condrestart) 
    #    if [ -f /var/lock/subsys/$prog ]; then 
    #        stop 
    #        start 
    #    fi 
    #    ;; 
    status) 
        status memcached 
        ;; 
    *) 
        echo "Usage: $0 {start|stop|restart|status}" 
        exit 1 
esac 
 
exit $RETVAL 

  

设置脚本可被执行:# chmod +x memcached

六、设置memcached随系统启动

# chkconfig --add memcached 
# chkconfig --level 35 memcached on 

  

启动memcached

# service memcached start 
//启动的时候其实是调用了下面的这个命令,以守护进程的方式来启动memcached  
/etc/memcached/bin/memcached -d -m 64 -u root -l 192.168.1.201  
\-p 11211 -c 1024 -P /etc/memcached/memcached.pid 

  

查看memcached是否启动:

# ps -ef | grep memcached

memcached命令参数解释

参数 参数解释及说明
-p <num> 监听的端口
-l <ip_addr> 链接的IP地址,,默认是本机。-l选项能够不使用,此时表示在全部网络接口地址上监听。建议是-l <ip_addr>指定一个内部网络IP地址,以免成为外部网络攻击的对象
-d start 启动memcached 服务
-d restart 重起memcached 服务
-d stop|shutdown 关闭正在运行的memcached 服务
-d install 安装memcached 服务
-d uninstall 卸载memcached 服务
-u <username> 以<username>的身份运行 (仅在以root运行的时候有效)
-m <num> 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c <num> 最大同时链接数,默认是1024
-f <factor> 块大小增加因子,默认是1.25
-n <bytes> 最小分配空间,key+value+flags默认是48
-h 显示帮助
相关文章
相关标签/搜索