Memcached使用

 

一、安装Memcached及Magent(Ubuntu-9.04-Server)

      先安装libevent在安装Memcached

wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz

tar -xzvf libevent-1.4.13-stable.tar.gz

cd libevent-1.4.13-stable

./configure --prefix=/usr/local/libevent

make

make install

 

 

 

wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz

tar -xzvf memcached-1.4.4.tar.gz

cd memcached-1.4.4

./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent

make

make install

ln -s /usr/local/libevent/lib/libevent-1.4.so.2 /usr/lib/

 

 

 

安装Magent

mkdir magent

cp magent-0.5.tar.gz magent

cd magent

tar -xzvf magent-0.5.tar.gz

/sbin/ldconfig

sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile

vi magent.c 添加

       #include <limits.h>

make

 

 

 

二、使用MemcachedMagent

       1Memcached参数解析及实例

-p <num>        监听的TCP端口  ( 缺省缺省 : 11211)

-d               以守护进程方式运行Memcached

-u <username>    运行 Memcached的账户,非 root用户

-m <num>        最大的内存使用, 单位是MB ,缺省是64 MB

-c <num>        软连接数量 , ,  缺省是1024

-v               输出警告和错误信息

-vv              打印客户端的请求和返回信息

-h               打印帮助信息

-i                打印 memcached libevent 的版权信息

-l                设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数

命令:/usr/local/memcached/bin/memcached -d -m 32 -l 192.168.1.233 -p 10000 -u administrator

       2Magent参数解析及实例

-h 帮助文档

  -u 用户ID

  -g ID

  -p 监听端口,默认为:11211

  -s ip:port, 设定Memcached服务器的ip地址和端口

  -b ip:port, 设定备有Memcached服务器的ip地址和端口

  -l 本地绑定的ip地址

  -n 最大连接数, 默认为4096

  -D don't go to background

  -k 使用ketama算法

  -i 保持激活的连接数, 默认为 20

  -v 输出警告和错误信息

命令:./magent -u administrator -n 51200 -l 192.168.1.239 -p 10000 -s 192.168.1.233:10000 -s 192.168.1.234:10000 -b 127.0.0.1:10001

三、详解Memcached使用

1.         MemcachedC语言的接口

1)        安装C/C++ Memcached客户端

开发库官网:http://tangent.org/552/libmemcached.html

开发库下载:http://download.tangent.org/libmemcached-0.25.tar.gz

lib memcached 库安装:

# tar zxvf libmemcached-0.25.tar.gz

#cd libmemcached-0.25

#./configure --prefix=/usr

# make

# make install

 

 

 

2)        简单应用

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<fcntl.h>

#include<libmemcached/memcached.h>

 

#define MAMCACHED_MAX_KEY 100

#define FILENAME "/usr/local/nginx/html/index.html"

#define CACHENAME "/index.html"

#define CACHELEN 11

 

long fileSize(){

    int fd = open(FILENAME, O_RDONLY);

    long size = lseek(fd, 0L, SEEK_END);

    close(fd);

    return size;

}//end fileSize

int

main(int argc, char *argv[])

{

        memcached_st *memc;

        memcached_return rc;

        memcached_server_st *servers;

        long fsize = fileSize();

        char bytebuf[fsize];

        FILE *fp;

        int i = 0;

 

        printf("%ld/n", fsize);

        //image2byte   

        fp = fopen(FILENAME, "rb");

        fread(bytebuf, 1, fsize, fp);

        fclose(fp);

        printf("%c/n", bytebuf[0]);

        printf("%ld/n", sizeof(bytebuf));

        //connect server

        memc = memcached_create(NULL);

        servers = memcached_server_list_append(NULL, "localhost", 12000, &rc);

        rc = memcached_server_push(memc, servers);

        memcached_server_free(servers);

 

        //save data

 

        printf("a/n");

        printf("%c/n", bytebuf[0]);

        rc = memcached_set(memc, CACHENAME, CACHELEN,

 bytebuf, sizeof(bytebuf), (time_t)0, (uint32_t)0);

        if(rc == MEMCACHED_SUCCESS){

                printf("Save key:key1 data:/"%s/"success./n",bytebuf);

        }//fi

 

        int fd = open(FILENAME, O_WRONLY|O_CREAT);

        write(fd, bytebuf, sizeof(bytebuf));

        close(fd);

 

        //Fetch data

        char return_key[MAMCACHED_MAX_KEY];

        size_t return_key_length;

        char *return_value;

        size_t return_value_length;

 

        const char *keys[] = {CACHENAME};

        size_t key_length[] = {CACHELEN};

        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);

        }//FI

 

        //Delet data

        rc = memcached_delete(memc, "key1", 4, (time_t)0);

        if(rc == MEMCACHED_SUCCESS){

                printf("Delete success/n");

        }//fi

 

        //free

        memcached_free(memc);

        return 0;

}//end main

2.         MemcachedPHP语言的接口

1)        PHPMemcached的扩展

Memcache扩展安装:

# tar zxvf memcache-2.2.4.tgz

# memcache-2.2.4

# /usr/local/php/bin/phpize

#./configure --with-php-config=/usr/local/php5/bin/php-config

#make

# make install

 

 

 

配置配置

# ls -l /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/memcache.so

# vim /usr/local/php/lib/php.ini

新增配置内容:

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"

extension = memcache.so extension = memcache.so

 

 

 

2)        Memcached提供的PHP接口

Memcache::add 添加一个值,如果已经存在,则返回false
Memcache::addServer
添加一个可供使用的服务器地址
Memcache::close
关闭一个Memcache对象
Memcache::connect
创建一个Memcache对象
memcache_debug
控制调试功能
Memcache::decrement
对保存的某个key中的值进行减法操作
Memcache::delete
删除一个key
Memcache::flush
清除所有缓存的数据
Memcache::get
获取一个key
Memcache::getExtendedStats
获取进程池中所有进程的运行系统统计
Memcache::getServerStatus
获取运行服务器的参数
Memcache::getStats
返回服务器的一些运行统计信息
Memcache::getVersion
返回运行的Memcache的版本信息
Memcache::increment
对保存的某个key中的值进行加法操作
Memcache::pconnect
创建一个Memcache的持久连接对象
Memcache::replace
对一个已有的key进行覆写操作
Memcache::set
添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold
对大于某一大小的数据进行压缩
Memcache::setServerParams
在运行时修改服务器的参数

 

3)        简单应用

<?php

 

        //连接Memcached

        $mem = new Memcache;

        $mem->connect("192.168.1.219", 12000);

 

        $mem->set("key1", 'This is first value', 0, 60);

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

        if($val == NULL) echo "hello","<br>";

        echo "Get key1 value:".$val, "<br>";

        //删除数据

        $mem->delete('key1');

        //关闭连接

        $mem->close();

?>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值