Memcached缓存系统的介绍、安装以及应用方法详解

本文实例讲述了Memcached缓存系统的介绍、安装以及应用方法。分享给大家供大家参考,具体如下:

一. memcached 是什么?

memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

memcached是一个高性能的、分布式内存对象缓存系统,应用广泛。 通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。

它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。还使用内置的内存块分配和哈希表算法,确保虚拟内存不会过来捣乱。

Memcached 官方网站:http://www.danga.com/memcached

二. memcached 的安装:

注:memcached 用到了libevent这个库用于Socket的处理,所以还需要安装libevent.官网:http://www.monkey.org/~provos/libevent/

1. 先安装libevent:

[root@localhost software]# tar zxvf libevent-1.4.11-stable.tar.gz
[root@localhost libevent-1.4.11-stable]# ./configure –prefix=/usr
[root@localhost libevent-1.4.11-stable]# make
[root@localhost libevent-1.4.11-stable]# make install

2. 测试libevent是否安装成功

[root@localhost libevent-1.4.11-stable]# ls -al /usr/lib | grep libevent
lrwxrwxrwx  1 root root    22 07-10 13:10 libevent-1.1a.so.1 -> libevent-1.1a.so.1.0.2
-rwxr-xr-x  1 root root  31596 2007-01-07 libevent-1.1a.so.1.0.2
lrwxrwxrwx  1 root root    21 07-21 03:33 libevent-1.4.so.2 -> libevent-1.4.so.2.1.3
-rwxr-xr-x  1 root root  308088 07-21 03:33 libevent-1.4.so.2.1.3
-rw-r--r--  1 root root  394474 07-21 03:33 libevent.a
lrwxrwxrwx  1 root root    26 07-21 03:33 libevent_core-1.4.so.2 -> libevent_core-1.4.so.2.1.3
-rwxr-xr-x  1 root root  109490 07-21 03:33 libevent_core-1.4.so.2.1.3
-rw-r--r--  1 root root  148742 07-21 03:33 libevent_core.a
-rwxr-xr-x  1 root root   866 07-21 03:33 libevent_core.la
lrwxrwxrwx  1 root root    26 07-21 03:33 libevent_core.so -> libevent_core-1.4.so.2.1.3
lrwxrwxrwx  1 root root    27 07-21 03:33 libevent_extra-1.4.so.2 -> libevent_extra-1.4.so.2.1.3
-rwxr-xr-x  1 root root  246870 07-21 03:33 libevent_extra-1.4.so.2.1.3
-rw-r--r--  1 root root  307370 07-21 03:33 libevent_extra.a
-rwxr-xr-x  1 root root   873 07-21 03:33 libevent_extra.la
lrwxrwxrwx  1 root root    27 07-21 03:33 libevent_extra.so -> libevent_extra-1.4.so.2.1.3
-rwxr-xr-x  1 root root   831 07-21 03:33 libevent.la
lrwxrwxrwx  1 root root    21 07-21 03:33 libevent.so -> libevent-1.4.so.2.1.3

安装OK。

3. 安装memcached,同时需要安装中指定libevent的安装位置

[root@localhost software]# tar zxvf memcached-1.4.0.tar.gz
[root@localhost memcached-1.4.0]# ./configure –with-libevent=/usr
[root@localhost memcached-1.4.0]# make
[root@localhost memcached-1.4.0]# make intall

4. 测试是否成功安装memcached

[root@localhost memcached-1.4.0]# ls -al /usr/local/bin | grep memcached
-rwxr-xr-x 1 root root 188225 07-21 03:35 memcached

安装OK。

三. 如何启动 memcached 服务:

只需要启动一个 memcached 监护进程,监护进程不需要配置文件,只要在命令行里面加三四个参数就可以了:

代码如下:

[root@localhost bin]# memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid

-d: (run as a daemon) 选项是启动一个守护进程
-m:(max memory to use for items in megabytes (default: 64 MB))是分配给Memcache使用的内存数量,单位是MB,我这里是100MB,
-u:(assume identity of <username> (only when run as root))是运行Memcache的用户,我这里是root,
-l:(interface to listen on)是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址127.0.0.1,
-p:是设置Memcache监听的端口,这里设置了11211,最好是1024以上的端口,
-c:选项是最大运行的并发连接数,默认是1024,这里设置了256,根据服务器的负载量来设定,
-P:(save PID in <file>, only used with -d option)是设置保存Memcache的pid文件,这里是保存在 /tmp/memcached.pid

注:也可以启动多个守护进程,不过端口不能重复。

四. 安装 Memcached 的PHP扩展:

在PHP中使用Memcached,有两种方式:

一种是安装PHP的memcached扩展。该扩展是用c写的,效率较高,需要在服务器上安装。

另外一种则是直接使用客户端的php-memcached-client类库。

下面是使用PECL中Memcache的专用扩展,因为毕竟是用C写的,效率高,而且安装部署起来也比较方便。

1. 在 http://pecl.php.net/package/memcache 选择相应想要下载的memcache版本。我下载的是:memcache-2.2.5.tgz 版本。

2. 安装 memcache

[root@localhost software]# tar zxvf memcache-2.2.5.tgz
[root@localhost software]# cd memcache-2.2.5
[root@localhost memcache-2.2.5]# /usr/bin/phpize
[root@localhost memcache-2.2.5]# ./configure –enable-memcache –with-php-config=/usr/bin/php-config –with-zlib-dir
[root@localhost memcache-2.2.5]# make
[root@localhost memcache-2.2.5]# make install

这步会有类似这样的提示:Installing shared extensions: /usr/local/php/modules

3. 把/etc/php.ini中的

extension_dir = "./"

修改为:

extension_dir = "/usr/lib/php/modules"

4. 并添加: extension=memcache.so

也可执行以下shell命令,对php.ini文件的修改:

代码如下:

sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"/nextension = "memcache.so"/n#' /usr/local/webserver/php/etc/php.ini

五. 安装C/C++ Memcached客户端库:libmemcached

下载:http://download.tangent.org/libmemcached-0.32.tar.gz

1. 安装 libmemcached

[root@localhost src]# tar zxvf libmemcached-0.32.tar.gz
[root@localhost src]# cd libmemcached-0.32
[root@localhost libmemcached-0.32]# ./configure --prefix=/usr
[root@localhost libmemcached-0.32]# make && make install

2. 检查安装结果

[root@localhost src]# ls /usr/lib/libmemcache* //库文件
[root@localhost src]# ls /usr/include/libmemcached/* //头文件
[root@localhost src]# ls /usr/bin/mem* //命令行工具

六. 应用:

1. 启动 memcache 服务

代码如下:

[root@localhost bin]# memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid

2. 重启 Web 服务器

[root@localhost bin]# service httpd restart

3. 创建 demo 测试程序

<?php
//连接
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
echo 'Memcache Version is:'.$mem->getVersion().'<br/>';
//保存数据
$mem->set('key1', 'This is first memcache demo', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: ".$val."<br/>"
//关闭连接
$mem->close();
?>

4. Memcached客户端与tokyotyrant DB操作访问

<?php
$memcache = new memcache();
$memcache->addServer('127.0.0.1:1978');
function microtime_float()
{
  list($usec, $sec) = explode(" ", microtime());
  return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
$data = 'abc123';
for($i = 0;$i <= 20000 ;$i++){
  $key = (string) rand(1,100);
  $memcache->set($key, $data);
}
for($i = 0;$i <= 20000 ;$i++){
  $key = (string) rand(1,100);
  echo $data = $memcache->get($key).'-'.$i.'<br/>';
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo $time;
$memcache->close();
?>

5. C/C++ 与 Memcached 结合代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libmemcached/memcached.h>
int main(int argc, char *argv[])
{
  memcached_st *memc;
  memcached_return rc;
  memcached_server_st *servers;
  char value[8191];
  //连接服务器
  memc = memcached_create(NULL);
  servers = memcached_server_list_append(NULL, "127.0.0.1",11211, &rc);
  rc = memcached_server_push(memc, servers);
  memcached_server_free(servers);
  //存储数据
  strcpy(value, "This is c first value");
  rc = memcached_set(memc, "key1", 4, value, strlen(value),
  (time_t)180, (uint32_t)0);
  if (rc == MEMCACHED_SUCCESS) {
  printf("Save key:key1 data:/"%s/" success./n", value);
  }
  //获取数据
  char return_key[MEMCACHED_MAX_KEY];
  size_t return_key_length;
  char *return_value;
  size_t return_value_length;
  char *keys[]= {"key1"};
  size_t key_length[]= {4};
  uint32_t flags;
  rc = memcached_mget(memc, keys, key_length, 1);
  return_value = memcached_fetch(memc, return_key,
  &return_key_length, &return_value_length, &flags, &rc);
  if (rc == MEMCACHED_SUCCESS) {
  printf("Fetch key:%s data:%s/n", return_key, return_value);
  }
  //删除数据
  rc = memcached_delete(memc, "key1", 4, (time_t)0);
  if (rc == MEMCACHED_SUCCESS) {
  printf("Delete Key key1 success./n");
  }
  //释放内存
  memcached_free(memc);
  return 0;
}

编译源代码:

[root@localhost html]# gcc -o cmem cmem.c -lmemcached
[root@localhost html]# ./cmem //执行
Save key:key1 data:"This is c first value" success.
Fetch key:key1 data:This is c first value
Delete Key key1 success.

6. C/C++ 与 Memcached 分布式结合代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libmemcached/memcached.h>
int main(int argc, char *argv[])
{
  memcached_st *memc;
  memcached_return rc;
  memcached_server_st *servers;
  char value[8191];
  //connect multi server
  memc = memcached_create(NULL);
  servers = memcached_server_list_append(NULL, "localhost", 11211, &rc);
  servers = memcached_server_list_append(servers, "localhost", 11212, &rc);
  rc = memcached_server_push(memc, servers);
  memcached_server_free(servers);
  //Save multi data
  size_t i;
  char *keys[]= {"key1", "key2", "key3"};
  size_t key_length[]= {4, 4, 4};
  char *values[] = {"This is c first value", "This is c second value", "This is c third value"};
  size_t val_length[]= {21, 22, 21};
  for (i=0; i <3; i++) {
  rc = memcached_set(memc, keys[i], key_length[i], values[i], val_length[i], (time_t)180,(uint32_t)0);
  if (rc == MEMCACHED_SUCCESS) {
    printf("Save key:%s data:/"%s/" success./n", keys[i], values[i]);
  }
  }
  //Fetch multi data
  char return_key[MEMCACHED_MAX_KEY];
  size_t return_key_length;
  char *return_value;
  size_t return_value_length;
  uint32_t flags;
  rc = memcached_mget(memc, keys, key_length, 3);
  while ((return_value = memcached_fetch(memc, return_key, &return_key_length, &return_value_length, &flags, &rc))) {
  if (rc == MEMCACHED_SUCCESS) {
    printf("Fetch key:%s data:%s/n", return_key, return_value);
  }
  }
  //Delete multi data
  for (i=0; i <3; i++) {
  rc = memcached_set(memc, keys[i], key_length[i], values[i], val_length[i], (time_t)180, (uint32_t)0);
  rc = memcached_delete(memc, keys[i], key_length[i], (time_t)0);
  if (rc == MEMCACHED_SUCCESS) {
    printf("Delete %s success/n", keys[i], values[i]);
  }
  }
  //free
  memcached_free(memc);
  return 0;
}

编译源代码:

[root@localhost html]# gcc -o cmultmem cmultmem.c -lmemcached
[root@localhost html]# ./cmultmem //执行
Save key:key1 data:"This is c first value" success.
Save key:key2 data:"This is c second value" success.
Save key:key3 data:"This is c third value" success.
Fetch key:key2 data:This is c second value
Fetch key:key3 data:This is c third value
Fetch key:key1 data:This is c first value
Delete key1 success
Delete key2 success
Delete key3 success

以上c/c++代码摘自:黑夜路人

7. 查看Memcache进程

[root@localhost html]# ps aux | grep memcached
root   11382 0.0 0.7 55124 1896 ?    Ssl 13:06  0:00 memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
root   11395 0.0 0.2  3912  664 pts/1  R+  13:08  0:00 grep memcached

8. 结束Memcache进程

[root@localhost html]# kill `cat /tmp/memcached.pid`

希望本文所述对大家memcached缓存程序设计有所帮助。

(0)

相关推荐

  • Memcached 分布式缓存实现原理简介

    摘要 在高并发环境下,大量的读.写请求涌向数据库,此时磁盘IO将成为瓶颈,从而导致过高的响应延迟,因此缓存应运而生.无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓存产品也是数不胜数,最常见的有redis和memcached等,既然是分布式,那么他们是怎么实现分布式的呢?本文主要介绍分布式缓存服务mencached的分布式实现原理. 缓存本质 计算机体系缓存 什么是缓存,我们先看看计算机体系结构中的存储体系,根据冯·诺依曼计算机体系结构模型,计算机分为五大部分:运算器.控制器.存

  • C# Memcached缓存用法实例详解

    本文实例讲述了C#中Memcached缓存的用法,分享给大家供大家参考.具体方法如下: ICacheStrategy.cs文件如下: 复制代码 代码如下: public interface ICacheStrategy {         /// <summary>         /// 添加数据到缓存         /// </summary>         /// <param name="objId">缓存名称</param>

  • php中操作memcached缓存进行增删改查数据的实现代码

    核心代码: <?php //创建一个memcache对象实例 $memcache = new Memcache; if(!$memcache->connect("127.0.0.1",11211)){ die('连接失败'); } if($memcache->set('key1',"xian",MEMCACHE_COMPRESSED,60)){ echo 'sucess!'; }//存值,其中xian字符串,也可以为数组,对象,但不能为资源 $va

  • Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存

    Laravel是我最近用得非常多而且越用就越喜欢的一款PHP框架,由于没有向下兼容的历史包袱,完全面向对象的风格,借助 Facades 优雅的IoC Container 实现,采用 Composer进行包管理,可以方便地引入和使用开源社区里的优秀组件--总而言之,这是一款真正让你能够 "code happy" 的"巨匠级PHP开发框架". 在尝试把自己的 Laravel App 部署到阿里云的时候,遇到了一个问题: Laravel 支持 Memcached 缓存,阿

  • asp.net(C#)遍历memcached缓存对象

    STATS命令 遍历memcached缓存对象(C#)转载之青草堂 出于性能考虑,memcached没有提供遍历功能,不过我们可以通过以下两个stats命令得到所有的缓存对象. 1.stats items 显示各个slab中item的数目. 2.stats cachedump slab_id limit_num 显示某个slab中的前limit_num个key列表,显示格式:ITEM key_name [ value_length b; expire_time|access_time s] 除了

  • PHP 内存缓存加速功能memcached安装与用法

    一.memcached 简介在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东.这里简单介绍一下,memcached 是高效.快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序.二.memcached 安装首先是下载 memcached 了,目前最新版本是 1.1.12,直接从官方网站即可下载到 memcached-1.1.12.tar.gz.除此之外,memcached 用到了 libevent,我下载的

  • .net/c# memcached缓存获取所有缓存键的方法步骤

    使用组件 memcached 1.2.6 .net 类库 memcacheddotnet_clientlib-1.1.5 1.增加memcacheddotnet_clientlib-1.1.5代码 下载好组件后,用vs打开.net类库memcacheddotnet_clientlib-1.1.5,打开MemCachedClient.cs,增加如下方法: 复制代码 代码如下: public Hashtable Stats(ArrayList servers, string command)    

  • 同台服务器使用缓存APC效率高于Memcached的演示代码

    复制代码 代码如下: <?php $memcachehost = 'localhost'; $memcacheport = '11211'; function microtime_float(){ list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } function runtime($t1){ return number_format((microtime_fl

  • PHP MemCached高级缓存配置图文教程

    1.Memcache相关介绍 memcache是一个高性能的分布式的内存对象缓存系统,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等. 使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取. 2.Memcache Win32的安装 (1)下载地址: http://www.jehiah.cz/projects/memcached-win32/ (2)安装步骤: step1

  • PHP MemCached 高级缓存应用代码

    Memcache常用方法 Memcache::add - 添加一个值,如果已经存在,则返回false Memcache::addServer - 添加一个可供使用的服务器地址 Memcache::close - 关闭一个Memcache对象 Memcache::connect - 创建一个Memcache对象 Memcache::debug - 控制调试功能 Memcache::decrement - 对保存的某个key中的值进行减法操作 Memcache::delete - 删除一个key值

随机推荐