Memcached技术

介绍:

memcached是一种缓存技术, 他可以把你的数据放入内存,从而通过内存访问提速,因为内存最快的, memcached技术的主要目的提速,

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

key    value

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

原理说明:

u 安装并使用memcached

安装步骤

(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名 0 存放时间(秒) 数据大小(字符)

举例:

add key1 0 30 5

  1. 如何获取

基本语法是:

get key值

get key1

  1. 修改

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

举例:

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 文件拷贝 php的ext 下

☞ 不同版本的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 设为0 表示,永不过期.(只要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 文件,我们如何处理session入memcached这个功能, 我们通过一个函数可以去修改 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();

  

七、            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

1、由于memcached是基于libevent的,因此需要安装libevent,libevent-devel

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

2、下载并解压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

3、编译安装memcached-1.4.5

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

4、配置环境变量

进入用户宿主目录,编辑.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

5、编写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

6、设置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 显示帮助

memcache基本讲解的更多相关文章

  1. memcache讲解和在.net中初使用

    memcache讲解和在.net中初使用 2017年10月17日 22:51:36 等待临界 阅读数:503   前言 传统数据库面临的问题 数据库死锁 磁盘IO 正文 了解memcache 原理 基 ...

  2. JAVA MemCache 史无前例的详细讲解【转】

    非原创转自:http://nhy520.iteye.com/blog/1775893 这篇文章是我看到的介绍的比较详细的,入门级别算是足足够了 Memcach什么是Memcache Memcache集 ...

  3. 第三篇 Nosql讲解之windows下Memcached和Memcache的区别安装(二)

    一.Memcached和Memcache的区别: 网上关于Memcached和Memcache的区别的理解众说纷纭,我个人的理解是: Memcached是一个内存缓存系统,而Memcache是php的 ...

  4. 第二篇 Nosql讲解之windows下memcache的安装(一)

    memcached基本概念 1.Memcached是danga的一个项目,最早是LiveJournal服务的,最初为了加速LiveJournal访问速度而开发的,后来被很多大型的网站采用. 官方网站: ...

  5. Memcache 内存分配策略和性能(使用)状态检查

    前言: 一直在使用Memcache,但是对其内部的问题,如它内存是怎么样被使用的,使用一段时间后想看看一些状态怎么样?一直都不清楚,查了又忘记,现在整理出该篇文章,方便自己查阅.本文不涉及安装.操作. ...

  6. MemCache的LRU删除机制详解

    本节主要讲解一下MC的LRU的删除机制和一些参数的限制 MC的过期数据惰性删除 1.当某个值过期后,并没有从内存中删除,因此,我们在进行st ats统计信息的时候,curr_items有其信息(它的数 ...

  7. memcache与memcached介绍及安装配置

    也许大家一看到Memcache和Memcached会有点晕,这两者有什么关系又有什么区别呢,下面先给大家说下Memcached,Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应 ...

  8. memcache缓存详解

    这篇文章主要介绍了PHP中的Memcache,从Memcache简介开始,详细讲解了如Memcache和memcached的区别.PHP的 Memcache所有操作方法.每个操作方法的详细解释等,需要 ...

  9. memcache中的add和set方法区别

    相信大家对memcache都不陌生,在项目中也经常使用memcache作为缓存方案,那么在使用过程中有没有发现为什么memcahce有两个添加缓存的方法:一个是add,一个是set,那么你知道这2个方 ...

随机推荐

  1. 引入的iframe是跨域的, 如何控制其高度

    前提是你有编辑这个跨域的iframe的权限!! 1. main-domain.html (main display HTML) <!DOCTYPE html> <html> & ...

  2. 防范DDOS攻击脚本

    防范DDOS攻击脚本 #防止SYN攻击 轻量级预防 iptables -N syn-flood iptables -A INPUT -p tcp --syn -j syn-flood iptables ...

  3. 『重构--改善既有代码的设计』读书笔记----Replace Array with Object

    如果你有一个数组,其中的元素各自代表不同东西,比如你有一个 QList<QString> strList; 其中strList[0]代表选手姓名,strList[1]代表选手家庭住址,很显 ...

  4. JavaScript学习总结【5】、JS DOM

    1.DOM 简介 当页面加载时,浏览器会创建页面的文档对象模型(Document Object Model).文档对象模型定义访问和处理 HTML 文档的标准方法.DOM 将 HTML 文档呈现为带有 ...

  5. python 连 mongodb

    这几天在学习Python Web开发,于是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样的好玩意儿,何必还自己造车呢?决定使用Tornado这个框架,然后数据库方面决定顺便 ...

  6. 2016030102 - Ubuntu软件安装与删除相关命令

    apt-get, dkpg 常用命令: 安装软件命令: apt-get install softname1 softname2 softname3…… 卸载软件命令: apt-get remove s ...

  7. uboot移植之环境变量在NandFlash

    一.概述 u-boot环境变量可以设置在Norflash上,也可以在NandFlash上. 倘若环境变量在NorFlash上,再假设S3C2440从NorFlash启动,是能正确从NorFlash上读 ...

  8. CoreProfiler/NanoProfiler

    使用CoreProfiler/NanoProfiler实现跨平台&应用的整合性能调试 摘要 NanoProfiler是一个开源.NET性能调试类库,CoreProfiler是其.NET Cor ...

  9. Mac、Linux与Windows

    Mac本身是基于达尔文内核(Darwin内核),是苹果由UNIX改造的类UNIX,然后在这内核基础上搭建的图形界面 Linux确实是个好东西,你只需要一个键盘,一个显示器,一根网线,接入网络,便能做几 ...

  10. Quartz1.8.5例子(八)

    /* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...