版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、云数据库 Memcache 版快速入门云数据库 Memcache 版/快速入门 PAGE 20快速入门云数据库Memcache版支持的协议及操作任何兼容Memcached协议的客户端都可以访问阿里云云数据库Memcache版服务,用户可以根据自身应用特 点选用支持SASL和Memcached Binary Protocol的任何Memcached客户端。协议Memcached Binary Protocol(二进制协议) SASL认证协议操作云数据库Memcache支持如下命令操作操作码操作命令备注0 x00Get0 x01Set0 x02Add0 x03Replace0 x04Delete0
2、 x05Increment0 x06Decrement0 x07Quit0 x08FlushOCS在时间精度上是秒(s)级0 x09GetQ0 x0aNo-op0 x0bVersion0 x0cGetK0 x0dGetKQ0 x0eAppend0 x0fPrepend0 x10Stat不支持0 x11SetQ0 x12AddQ0 x13ReplaceQ0 x14DeleteQ0 x15IncrementQ0 x16DecrementQ0 x17QuitQ0 x18FlushQ0 x19AppendQ0 x1aPrependQ0 x1bVerbosity不支持0 x1cTouch0 x1dGAT
3、0 x1eGATQ0 x20SASL list mechs0 x21SASL Auth0 x22SASL Step客户端任何兼容Memcached协议的客户端都可以访问阿里云云数据库Memcache版(原OCS)服务。每一个Memcached客户端都有自己的特点,用户可以根据应用特点选用支持SASL和Memcached Binary Protocol的任何一款Memcached客户端。开源客户端Memcache官方介绍了很多客户端让用户选择,在实践中,我们发现以下的memcache客户端与OCS交互时工 作顺畅,推荐用户使用:Java: Spymemcached(推荐) 客户端下载客户端介绍客
4、户端版本介绍PHP: memcached 客户端下载客户端介绍客户端版本介绍C客户端下载客户端介绍客户端版本介绍C#/.NET: EnyimMemcached 客户端下载客户端介绍客户端版本介绍Python客户端下载客户端介绍客户端版本介绍注意:以上所有第三方开源客户端,均非阿里云官方提供,可能存在潜在bug。开发者须自行保证客 户端的质量。因客户端直接或间接导致的故障或损失,阿里云概不负责。代码示例Java代码示例第一步,登录已有的阿里云ECS服务器,在上面安装Java JDK和常用的IDE(比如Eclipse);(注意:只有在阿里云的ECS服务器上,才能通过内网访问云数据库Memcache
5、实例。所以,用家里或是公司 的电脑直接执行下面的代码示例是看不到结果的)Java JDK 下 载 地 址 Eclipse(下载地址1,下载地址2)第二步,在把Java开发环境准备好了之后,第一个代码示例如下,把里面的Java代码复制到Eclipse Project里面去。此时的代码是编译不成功的,因为要想调用OCS缓存服务还需要一个第三方提供的jar包下载地址。添加 这个jar包之后,代码就能编译通过了。import java.io.IOException;import java.util.concurrent.ExecutionException; import net.spy.memcac
6、hed.AddrUtil;import net.spy.memcached.ConnectionFactoryBuilder;import net.spy.memcached.ConnectionFactoryBuilder.Protocol; import net.spy.memcached.MemcachedClient;import net.spy.memcached.auth.AuthDescriptor; import net.spy.memcached.auth.PlainCallbackHandler; import ernal.OperationFuture;public cl
7、ass OcsSample1 public static void main(String args) final String host = ;/控制台上的内网地址 final String port =11211; /默认端口 11211,不用改final String username = xxxxxxxxx;/控制台上的访问账号 final String password = my_password;/邮件中提供的密码MemcachedClient cache = null; try AuthDescriptor ad = new AuthDescriptor(new StringPL
8、AIN, new PlainCallbackHandler(username, password);cache = new MemcachedClient(new ConnectionFactoryBuilder().setProtocol(Protocol.BINARY).setAuthDescriptor(ad).build(),AddrUtil.getAddresses(host + : + port);System.out.println(OCS Sample Code);OcsSample1.java 代码示例(需要用户名和密码)/向OCS中存一个key为ocs的数据,便于后面验证读
9、取数据String key = ocs;String value = Open Cache Service, from HYPERLINK http:/www.A/ www.A;int expireTime = 1000; / 过期时间,单位s; 从写入时刻开始计时,超过expireTime s后,该数据过期失效,无法再读出;OperationFuture future = cache.set(key, expireTime, value);/向OCS中存若干个数据,随后可以在OCS控制台监控上看到统计信息for(int i=0;i100;i+)String key=key-+i;String
10、 value=value-+i;/执行set操作,向缓存中存数据int expireTime = 1000; / 过期时间,单位s cache.set(key, expireTime, value);future.get(); / 确保之前(mc.set()操作已经结束System.out.println(Set操作完成!);/执行get操作,从缓存中读数据,读取key为ocs的数据System.out.println(Get操作:+cache.get(key); catch (IOException e) e.printStackTrace(); catch (InterruptedExce
11、ption e) e.printStackTrace(); catch (ExecutionException e) e.printStackTrace();if (cache != null) cache.shutdown();/eofimport java.io.IOException;import java.util.concurrent.ExecutionException;import net.spy.memcached.AddrUtil;import net.spy.memcached.BinaryConnectionFactory; import net.spy.memcache
12、d.MemcachedClient; import ernal.OperationFuture;public class OcsSample2 public static void main(String args) OcsSample2.java 代码示例(不需要用户名和密码)final String host = ; /控制台上的内网地址 final String port = 11211; /默认端口 11211,不用改MemcachedClient cache = null; try cache = new MemcachedClient(new BinaryConnectionFac
13、tory(), AddrUtil.getAddresses(host + : + port); System.out.println(OCS Sample Code);读出;/向OCS中存一个key为ocs的数据,便于后面验证读取数据String key = ocs;String value = Open Cache Service, from HYPERLINK http:/www.A/ www.A;int expireTime = 1000; / 过期时间,单位s; 从写入时刻开始计时,超过expireTime s后,该数据过期失效,无法再OperationFuture future =
14、cache.set(key, expireTime, value);/向OCS中存若干个数据,随后可以在OCS控制台监控上看到统计信息for (int i = 0; i /etc/php5/conf.d/pdo.ini echo memcached.use_sasl = 1/etc/php5/conf.d/pdo.iniphp -m |grep mem memcached 【显示出该组件代表安装完成】 配置完毕PHP代码示例示例1:基本的连接云数据库Memcache及set/get操作setOption(Memcached:OPT_COMPRESSION, false); /关闭压缩功能$co
15、nnect-setOption(Memcached:OPT_BINARY_PROTOCOL, true); /使用binary二进制协议$connect-addServer(, 11211); /添加OCS实例地址及端口号$connect-setSaslAuthData(aaaaaaaaaa, password); /设置OCS帐号密码进行鉴权,如已开启免密码功能,则无需此步骤$connect-set(hello, world); echo hello: ,$connect-get(hello);$connect-quit();?示例2:在云数据库Memcache中缓存一个数组setOptio
16、n(Memcached:OPT_COMPRESSION, false); /关闭压缩功能$connect-setOption(Memcached:OPT_BINARY_PROTOCOL, true);/使用binary二进制协议$connect-addServer(, 11211);/添加OCS实例地址及端口号$connect-setSaslAuthData(xxxxxxxx, bbbbbbbb);/设置OCS帐号密码进行鉴权,如已开启免密码功能,则无需此步骤$user = array( name = ocs, age = 1,sex = male); /声明一组数组$expire = 60;
17、 /设置过期时间test($connect-set(your_name,$user,$expire), true, Set cache failed); if($connect-get(your_name)$result =$connect-get(your_name);elseecho Return code:, $connect-getResultCode();echo Retucn Message:, $connect-getResultMessage (); /如出现错误,解析出返回码$result= ;print_r($result);$connect-quit();function
18、 test($val, $expect, $msg)if($val!= $expect) throw new Exception($msg);?示例3:云数据库Memcache与MySQL数据库结合使用setOption(Memcached:OPT_COMPRESSION, false);/关闭压缩功能$connect-setOption(Memcached:OPT_BINARY_PROTOCOL, true);/使用binary二进制协议$connect-addServer(, 11211);/添加实例地址 端口号$connect-setSaslAuthData(xxxxxx, my_pas
19、swd);/设置OCS帐号密码进行鉴权,如已开启免密码功能,则无需此步骤$user = array( name = ocs, age = 1,sex = male); /定义一组数组if($connect-get(your_name)$result =$connect-get(your_name); print_r($result);echo Found in OCS, get data from OCS; /如果获取到数据,则打印此数据来源于OCS exit;elseecho Return code:, $connect-getResultCode();echo Retucn Message
20、:, $connect-getResultMessage ();/抛出code返回码$db_host=; /数据库地址$db_name=my_db;/database name$db_username=db_user; /数据库用户名$db_password=db_passwd;/数据库用户密码$connection=mysql_connect($db_host,$db_username,$db_password); if (!mysql_select_db($db_name, $connection)echo Could not select database; /数据库连接不成功则抛出错误
21、信息exit;$sql = SELECT name,age,sex FROM test1 WHERE name = ocs;$result = mysql_query($sql, $connection); while ($row = mysql_fetch_assoc($result)$user = array(name = $rowname,age = $rowage,sex = $rowsex,);$expire = 5; /设置数据在缓存中的过期时间test($connect-set(your_name,$user,$expire), true, Set cache failed);
22、/写入OCS缓存mysql_free_result($result); mysql_close($connection);print_r($connect-get(your_name); /打印出 获取到的数据echo Not Found in OCS,get data from MySQL; /确认从数据库获取的数据$connect-quit();function test($val, $expect, $msg)if($val!= $expect) throw new Exception($msg);?环境配置依赖于bmemcached(支持SASL扩展),下载链接 /jaysonsant
23、os/python-binary- memcachedPython代码示例#!/usr/bin/env python import bmemcachedclient = bmemcached.Client(ip:port), user, passwd) print client.set(key, value11111111111)print client.get(key)C#/.NET代码示例下载及使用.net客户端/enyim/EnyimMemcached/releases/tag/emc2.12 测试代码示例using System.Net; using Enyim.Caching;usi
24、ng Enyim.Caching.Configuration; using Enyim.Caching.Memcached; namespace OCS.Memcachedpublic sealed class MemCachedprivate static MemcachedClient MemClient; static readonly object padlock = new object();/线程安全的单例模式public static MemcachedClient getInstance()if (MemClient = null)lock (padlock)if (MemCl
25、ient = null)MemClientInit();return MemClient;static void MemClientInit()/初始化缓存MemcachedClientConfiguration memConfig = new MemcachedClientConfiguration(); IPAddress newaddress =IPAddress.Parse(Dns.GetHostEntry (your_ocs_host).AddressList0.ToString();/your_ocs_host替换为OCS内网地址IPEndPoint ipEndPoint = ne
26、w IPEndPoint(newaddress, 11211);/ 配 置 文 件 - ip memConfig.Servers.Add(ipEndPoint);/ 配置文件 - 协议memConfig.Protocol = MemcachedProtocol.Binary;/ 配置文件-权限memConfig.Authentication.Type = typeof(PlainTextAuthenticator); memConfig.Authentication.Parameterszone = ; memConfig.Authentication.ParametersuserName =
27、 username; memConfig.Authentication.Parameterspassword = password;/下面请根据实例的最大连接数进行设置memConfig.SocketPool.MinPoolSize = 5;memConfig.SocketPool.MaxPoolSize = 200; MemClient=new MemcachedClient(memConfig);依赖 调用代码:MemcachedClient MemClient = MemCached.getInstance();环境配置下载编译安装C+客户端 /libmemcached/1.0/1.0.
28、18/+download/libmemcached- 1.0.18.tar.gztar -xvf libmemcached-1.0.18.tar.gz cd libmemcached-1.0.18./configure makemake install (可能需要sudo权限)然后执行:C+代码示例tar -xvf ocs_test.tar.gz cd ocs_testvim ocs_test_sample1.cpp修改TARGET_HOST为购买到的OCS地址修改USERNAME为购买到的用户名修改PASSWORD为设置好的密码下载ocs_test.tar.gz./build.sh生成ocs
29、_test ./ocs_test执行即可看到写入一个key到ocs中,再从ocs获取到,最后将这个key从ocs中删除。 ocs_test_sample1.cpp的代码如下:#include #include #include using namespace std;#define TARGET_HOST #define USERNAME #define PASSWORD int main(int argc, char *argv)memcached_st *memc = NULL; memcached_return rc;memcached_server_st *server; memc =
30、 memcached_create(NULL);server = memcached_server_list_append(NULL, TARGET_HOST, 11211,&rc);/* SASL */ sasl_client_init(NULL);rc = memcached_set_sasl_auth_data(memc, USERNAME, PASSWORD); if(rc != MEMCACHED_SUCCESS) coutSet SASL err: endl;rc = memcached_behavior_set(memc,MEMCACHED_BEHAVIOR_BINARY_PRO
31、TOCOL,1); if(rc != MEMCACHED_SUCCESS) coutBinary Set err:endl;/* SASL */rc = memcached_server_push(memc,server); if(rc != MEMCACHED_SUCCESS) cout Connect Mem err: rc endl;memcached_server_list_free(server);string key = TestKey; string value = TestValue;size_t value_length = value.length(); size_t ke
32、y_length = key.length();int expiration = 0; uint32_t flags = 0;/Save datarc = memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags); if (rc != MEMCACHED_SUCCESS)cout Save data failed: rc endl; return -1;cout Save data succeed, key: key value: value endl;cout Star
33、t get key: key endl;char* result = memcached_get(memc,key.c_str(),key_length,&value_length,&flags,&rc); cout Get value: result endl;/Delete datacout Start delete key: key endl;rc = memcached_delete(memc,key.c_str(),key_length,expiration); if (rc != MEMCACHED_SUCCESS) cout Delete key failed: rc endl;
34、cout Delete key succeed: rc endl;/free memcached_free(memc); return 0;下面是另一个C+程序使用OCS的代码实例,在这里我们可以看见OCS缓存与MySQL数据库相结合的场景。#include #include #include #include #include using namespace std;#define OCS_TARGET_HOST #define OCS_USERNAME your_user_name#define OCS_PASSWORD your_password#define MYSQL_HOST#de
35、fine MYSQL_USERNAME db_user#define MYSQL_PASSWORD db_paswd#define MYSQL_DBNAMEtestdb#define TEST_USER_ID100MYSQL *mysql = NULL; memcached_st *memc = NULL; memcached_return rc;int InitMysql()mysql = mysql_init(0);if (mysql_real_connect(mysql, MYSQL_HOST, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DBNAME,
36、MYSQL_PORT, NULL, CLIENT_FOUND_ROWS) = NULL )cout connect mysql failure! endl;mysql -h host -uUSER -pPASSSWORD create database testdb;create table user_info (user_id int, user_name char(32) not null, password char(32) not null, is_online int, primary key(user_id) );编译安装C+客户端的步骤还是与上一个例子相同。1.在MySQL数据库
37、中创建示例database和table;tar -xvf ocs_test_2.tar.gz cd ocs_testvim ocs_test_sample2.cpp修改OCS_TARGET_HOST为购买到的OCS地址, 修改OCS_USERNAME为OCS的实例名, 修改OCS_PASSWORD为设置好的密码;修改MYSQL_HOST为MySQL地址, 修改MYSQL_USERNAME为数据库的用户名, 修改MYSQL_PASSWORD为数据库的密码;下载ocs_test_2.tar.gz 执行:./build.sh生成ocs_test ./ocs_test执行即可ocs_test_samp
38、le2.cpp代码如下:return EXIT_FAILURE;cout connect mysql success! endl; return 0;bool InitMemcached()memcached_server_st *server; memc = memcached_create(NULL);server = memcached_server_list_append(NULL, OCS_TARGET_HOST, 11211,&rc);/* SASL */ sasl_client_init(NULL);rc = memcached_set_sasl_auth_data(memc,
39、OCS_USERNAME, OCS_PASSWORD); if (rc != MEMCACHED_SUCCESS)coutSet SASL err: endl; return false;rc = memcached_behavior_set(memc,MEMCACHED_BEHAVIOR_BINARY_PROTOCOL,1); if (rc != MEMCACHED_SUCCESS)coutBinary Set err:endl; return false;/* SASL */rc = memcached_server_push(memc,server); if (rc != MEMCACH
40、ED_SUCCESS)cout Connect Mem err: rc endl; return false;memcached_server_list_free(server); return true;struct UserInfoint user_id;char user_name32; char password32; int is_online;bool SaveToCache(string &key, string &value, int expiration)size_t value_length = value.length(); size_t key_length = key
41、.length(); uint32_t flags = 0;/Save datarc = memcached_set( memc,key.c_str(), key.length(), value.c_str(), value.length(), expiration, flags); if (rc != MEMCACHED_SUCCESS)cout Save data to cache failed: rc endl; return false;cout Save data to cache succeed, key: key value: value endl; return true;Us
42、erInfo *GetUserInfo(int user_id)UserInfo *user_info = NULL;/get from cache string key; stringstream out; out user_id; key = out.str();cout Start get key: key endl; size_t value_length;uint32_t flags;char* result = memcached_get(memc, key.c_str(), key.size(), &value_length, &flags, &rc); if (rc != ME
43、MCACHED_SUCCESS)cout Get Cache Failed, start get from mysql. endl; int status;char select_sql1024;memset(select_sql, 0 x0, sizeof(select_sql);sprintf(select_sql, select * from user_info where user_id = %d, user_id); status = mysql_query(mysql, select_sql);if (status !=0 )cout query from mysql failur
44、e! endl; return NULL;cout the status is : status user_id = atoi(row0);strncpy(user_info-user_name, row1, strlen(row1); strncpy(user_info-password, row2, strlen(row2); user_info-is_online = atoi(row3);mysql_free_result(mysql_result); return user_info;cout Get from cache succeed endl; user_info = new Use
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学信息科技人教版(新教材)二年级全一册第三单元 隐私保护我能行 教学设计
- 钢结构焊接材料复验要求
- 2026新疆新纺新材料有限公司招聘考试备考试题及答案解析
- 2026盐城师范学院招聘专业技术人员34人(第一批)笔试备考试题及答案解析
- 2026云南弥勒产业园区管理委员会招聘1人考试备考试题及答案解析
- 2026中国农业科学院麻类研究所功能因子利用与生物合成团队科研助理招聘2人(湖南)考试备考题库及答案解析
- 2026年及未来5年市场数据中国非酒精饮料行业发展监测及投资战略规划建议报告
- 2026四川成都兴城投资集团有限公司成都蓉城康养集团有限公司招聘养老院储备院长岗等岗位3人考试备考题库及答案解析
- 酒店挂账制度
- 2026年及未来5年市场数据中国云南省装配式建筑行业市场发展数据监测及投资前景展望报告
- 2026届广东广州市普通高中毕业班综合测试(二)数学(含答案)
- 2025-2030中国数字多用表行业发展分析及竞争格局与发展趋势预测研究报告
- 2026届东北三省三校高三第二次联合模拟考试物理试题(含答案解析)
- 初中物理八年级下册《功与机械能》单元教学设计:探究“功”的内涵、计算与意义
- 医疗器械质量安全风险会商管理制度
- 2026年青少年国防教育专题竞赛题库
- 交银金科校招笔试题库
- 2026年长春中考艺术常识测试题及答案
- 铁路防胀知识培训
- 截桩头施工方案
- 《商标品牌价值评估规范》团体标准-征求意见稿
评论
0/150
提交评论