连接文本协议的 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