连接文本协议的 Memcached 实例

使用场景

每个 Memcached 客户端各有特点,用户可根据应用特点选用支持 ascii协议的任何一款 Memcached 客户端。

网易云提供下列客户端连接文本协议实例的示例:

Telnet连接文本协议的 Memcached 实例

Note

1.确保本地已安装并开启telnet服务;

2.本地服务器连接实例,请先连接 网易云 OpenVPN

操作步骤

使用如下命令连接 Memcached:

telnet <Memcached IP>  <Memcached 端口号>
# 本示例中为 telnet 10.173.32.165 11211

退出命令:

quit

set、add、replace这3个是用于操作存储在 memcached 中的键值对的标准修改命令,且都使用如下所示的语法:

command <key> <flags> <expiration time> <bytes> [noreply]

<value>

参数说明如下:

command              set/add/replace
key                  key 用于查找缓存值
flags                可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time      在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes                在缓存中存储的字节点
value                存储的值(始终位于第二行)
noreply              可选选项,如果有这个选项,无论对错都不返回结果 

基本命令说明:

  • set:用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换
set userId 0 0 5
12345
STORED
  • add:仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且获得响应 NOT_STORED
set userId 0 0 5
12345
STORED
add userId 0 0 5
55555
NOT_STORED
add companyId 0 0 3
564
STORED
  • replace:仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,则从 memcached 服务器接受到一条 NOT_STORED 响应
replace accountId 0 0 5
67890
NOT_STORED
set accountId 0 0 5
67890
STORED
replace accountId 0 0 5
55555
STORED
  • get:用于检索与之前添加的键值对相关的值。可以使用 get 执行大多数检索操作
set userId 0 0 5
12345
STORED
get userId
VALUE userId 0 5
12345
END
get bob
END
  • delete:用于删除 memcached 中的任何现有值。可以使用一个键调用delete,如果该键存在于缓存中,则删除该值。如果不存在,则返回一条NOT_FOUND 消息
set userId 0 0 5
98765
STORED
delete bob
NOT_FOUND
delete userId
DELETED
get userId
END

Python 客户端连接文本协议的 Memcached 实例

Note

1.本地服务器连接实例,请先登录 网易云 OpenVPN

2.网易云Python 客户端示例

3.示例 Python 版本为2.7

操作步骤

在线安装

yum -y install epel-release
yum -y install python-pip
pip install python-memcached

创建测试脚本test.py,加入以下内容

#!/usr/bin/env python
import memcache
client = memcache.Client(['ip:port'],debug=0)
print client.set('key', 'value1')
print client.get('key')

参数说明:

  • ip:port:memcached的内网IP和端口(默认 11211)

执行测试脚本,查看测试结果

python test.py

Attention

若本地环境无法使用 pip 方式安装,可选择源码方式安装。python-memcached下载:python-memcached

C++ 客户端连接文本协议的 Memcached 实例

Note

1.本地服务器连接实例,请先登录 网易云 OpenVPN

2.网易云 C++ 客户端示例,libmemcached下载:libmemcached-1.0.18.tar.gz

3.示例操作系统版本为 Centos7.0

操作步骤

源码安装

yum install  gcc-c++  gcc  -y
tar -xvf libmemcached-1.0.18.tar.gz 
cd libmemcached-1.0.18
./configure
make 
make install

编写测试程序 test.cpp,加入以下内容

#include <iostream>
#include <string>
#include <libmemcached/memcached.h>
using namespace std;

int main(int argc, char *argv[])
{
    memcached_st *memc = NULL;
    memcached_return res;
    memcached_server_st *server;
    memc = memcached_create(NULL);
    server = memcached_server_list_append(NULL, "ip", port, &res);
    res = memcached_server_push(memc, server);
    if(res != MEMCACHED_SUCCESS) {
      cout <<"Connect Memcached Error:"<< res << endl;
    }
    memcached_server_list_free(server);
    string key = "key1";
    string value = "value1";
    size_t value_length = value.length();
    size_t key_length = key.length();
    int expiration = 0;
    uint32_t flags = 0;

    //Save Data
    res = memcached_set(memc, key.c_str(), key.length(), value.c_str(), value.length(), expiration, flags);
    if (res != MEMCACHED_SUCCESS){
      cout <<"Save data failed: " << res << endl;
      return -1;
    }
    cout <<"Save data succeed, key: " << key << " value: " << value << endl;
    cout << "Start get key:" << key << endl;
    char* result = memcached_get(memc, key.c_str(), key_length, &value_length, &flags, &res);
    cout << "Get value:" << result << endl;

    //Delete data
    cout << "Start delete key:" << key << endl;
    res = memcached_delete(memc, key.c_str(), key_length, expiration);
    if (res != MEMCACHED_SUCCESS) {
      cout << "Delete key failed: " << res << endl;
    }
    cout << "Delete key succeed: " << res << endl;

    //free
    memcached_free(memc);
    return 0;
}

参数说明:

  • ip:port:memcached的内网IP和端口(默认 11211)

配置环境变量

vim /etc/profile
增加:export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
source /etc/profile

Attention

将libmemcached.so文件所在目录加入到变量LD_LIBRARY_PATH中,不同系统路径可能不一样, 请根据自己的安装目录替换。

编译

g++ -g -Wall -std=c++0x test.cpp -lmemcached -lpthread -o memcached

执行测试程序,查看测试结果

./memcached

Java 客户端连接文本协议的 Memcached 实例

Note

1.本地服务器连接实例,请先登录 网易云 OpenVPN

2.网易云Java 客户端示例,spymemcached-2.10.3.jar下载:spymemcached-2.10.3.jar

操作步骤

示例代码

import net.spy.memcached.MemcachedClient;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import java.net.*;

public class main{
	public static void main(String[] args){
		String key = "key1";
		String value = "value1";
		 try{
	         //连接 Memcached 服务
	         MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("ip", port));
	         
	         //存储数据
	         Future fo = mcc.set(key, 900, value);
	      
	         //查看存储状态
	         System.out.println("set status:" + fo.get());
	         
	         //输出值
	         System.out.println(key +':'+ mcc.get(key));
	         
	         //删除数据
	         fo = mcc.delete(key);

	         //输出执行 delete 方法后的状态
	         System.out.println("delete status:" + fo.get());
	         
	         //查看数据是否删除
	         System.out.println(key +':'+ mcc.get(key));

	         //关闭连接
	         mcc.shutdown();
	         
	      }catch(Exception ex){
	         System.out.println( ex.getMessage() );
	      }
	}
}

参数说明:

  • ip:port:memcached的内网IP和端口(默认 11211)

执行测试代码,查看测试结果

PHP 客户端连接文本协议的 Memcached 实例

Note

1.本地服务器连接实例,请先登录 网易云 OpenVPN

2.网易云 PHP 客户端的示例,libmemcached下载:libmemcached

3.示例PHP版本为5.4,操作系统版本为 Centos7.0

操作步骤

源码安装

(1) libmemcached 包下载和安装

yum install  gcc-c++  gcc  -y
tar -xvf libmemcached-1.0.18.tar.gz 
cd libmemcached-1.0.18
./configure
make 
make install

(2)安装 php memcache 扩展

yum install -y php-5.4.16-42.el7.x86_64
yum install zlib-devel php-devel
wget http://pecl.php.net/get/memcache-2.2.7.tgz  #下载扩展包
tar -zxvf memcache-2.2.7.tgz
cd memcache-2.2.7
phpize     #如果系统中有多套php环境需要绝对路径执行
./configure --with-php-config=/usr/bin/php-config    #根据自己php-config位置进行调整
make
make install   #安装成功会显示memcache.so的位置

配置php.ini

增加:
[Memcache]
extension_dir = "/usr/lib64/php/modules/"  #具体路径为上面make install 后显示的memcache.so所在目录的路径
extension = memcache.so

配置环境变量

vim /etc/profile
增加:export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
source /etc/profile

Attention

将libmemcached.so文件所在目录加入到变量LD_LIBRARY_PATH中,不同系统路径可能不一样, 请根据自己的安装目录替换。

查看安装结果

php -m | grep memcache

编写测试程序 test.php,加入以下内容

<?php
$key = "key1";
$value = "value1";
$memcache = new Memcache; 

#连接memcached服务
$memcache->connect('ip', port) or die ("Could not connect"); 

#存储数据
$memcache->set($key, $value);    

#获取数据    
$get_value = $memcache->get($key);
printf("%s\n", $get_value);

#删除数据
$memcache->delete($key);

#获取数据
$get_value = $memcache->get($key);
printf("%s\n", $get_value);
$memcache->close();
?>

参数说明:

  • ip:port:memcached的内网IP和端口(默认 11211)

执行测试程序,查看测试结果

php test.php