华为云分布式缓存服务Memcached版对接使用完全指南

apphuang2026年06月24日 18:12:194

1. 引言:为什么选择华为云DCS Memcached

在当今高并发、低延迟的互联网应用场景中,分布式缓存服务已成为提升系统性能的基石。Memcached作为一款高性能的分布式内存对象缓存系统,以其简洁的协议、卓越的读写速度和良好的水平扩展能力,长期占据缓存技术栈的重要位置。华为云分布式缓存服务DCS(Distributed Cache Service)提供的Memcached版,将开源Memcached的能力与华为云的基础设施深度整合,为开发者提供了一种可靠、易用且安全的托管式缓存解决方案。

华为云DCS Memcached支持单机和主备两种部署架构,规格从2GB到64GB可选,能够满足从轻量级应用到大型业务系统的多样化需求。实例支持在线一键扩容,规格变更过程中不影响上层业务,为业务的弹性伸缩提供了极大便利。此外,DCS Memcached提供了密码访问和免密访问两种认证模式,支持基于安全组的访问控制,有效保障了缓存数据的安全。

本文将从零开始,手把手教你如何在华为云上创建Memcached实例,并通过多种客户端完成对接与使用。

需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联

2. 创建Memcached实例

2.1 登录控制台并进入缓存管理

首先,登录华为云管理控制台。在控制台左上角单击区域选择下拉框,选择与您的应用程序部署位置相近的区域,以降低网络延迟、提高访问速度。接着,单击左侧菜单栏的“缓存管理”,进入缓存实例信息页面。

2.2 配置实例参数

在“缓存管理”页面,单击“创建缓存实例”,进入实例创建页面。您需要依次配置以下核心参数:

  • 计费模式:支持包年/包月和按需计费两种模式。按需计费适合短期或测试场景,包年/包月适合长期稳定运行的生产环境。
  • 区域与可用区:选择靠近您业务用户的区域,并可根据需要选择单可用区或跨可用区部署以实现同城灾备。
  • 缓存引擎:选择“Memcached”。
  • 实例类型:支持单机和主备两种类型。主备实例通过冗余副本实现自动故障切换,提供更高的可用性。
  • 规格:根据业务预估的内存需求选择,支持2GB、4GB、8GB、16GB、32GB、64GB等多种规格。
  • 虚拟私有云VPC与子网:选择实例所在的VPC和子网。后续连接实例的弹性云服务器ECS必须部署在同一VPC中。
  • 安全组:Memcached实例通过安全组进行访问控制。请选择或创建允许您所需端口(默认11211)通信的安全组。
  • 访问方式:支持“密码访问”和“免密访问”两种模式。出于安全考虑,生产环境强烈建议选择“密码访问”。选择密码访问后,需要设置用户名和密码。Memcached密码访问模式下,实例只能使用二进制协议并进行SASL鉴权。
  • 自动备份:仅主备实例支持该选项,可定期备份缓存数据。
  • 实例名称与数量:设置实例名称和创建数量。

配置完成后,单击“立即创建”,确认实例信息无误后提交请求。缓存实例创建大约需要5到15分钟,实例状态变为“运行中”即表示创建成功。

3. 连接前的网络准备

在正式连接Memcached实例之前,需要确保网络环境配置正确。华为云DCS Memcached实例默认部署在VPC内部网络中,不直接暴露于公网。以下是连接前的核心检查项:

  • 同一VPC:用于连接Memcached的弹性云服务器ECS必须与Memcached实例属于同一个VPC。
  • 安全组规则:ECS与Memcached实例需要配置相同的安全组,或通过设置安全组规则确保网络互通。
  • 跨VPC访问:如果ECS与Memcached实例不在同一VPC中,可以通过建立VPC对等连接的方式连通网络。

完成网络配置后,在“缓存管理”页面单击实例名称进入概览页面,即可查看并获取该Memcached实例的IP地址/域名和端口。这些信息将在后续客户端连接中用到。

4. 使用Telnet客户端连接Memcached

Telnet是最简单的连接方式,适合用于快速验证实例连通性和调试Memcached命令。Memcached支持基于TCP的文本协议,通过ASCII文本传递命令,便于用户编写客户端和调测问题。

4.1 前提条件

  • 已成功创建Memcached实例且状态为“运行中”。
  • 已创建同一VPC内的弹性云服务器ECS,并已安装Telnet客户端。

4.2 安装Telnet客户端

在Linux系统中,如果没有安装Telnet客户端,可执行以下命令安装:

yum -y install telnet

在Windows系统中,可通过“控制面板 > 程序 > 打开或关闭Windows功能”,找到并打开“Telnet客户端”功能。

4.3 连接实例

登录ECS,执行以下命令连接Memcached实例:

telnet {ip_or_domain_name} {port}

其中{ip_or_domain_name}为Memcached实例的IP地址/域名,{port}为端口(默认为11211)。连接成功后,界面提示如下:

Trying XXX.XXX.XXX.XXX...
Connected to XXX.XXX.XXX.XXX.
Escape character is '^]'.

4.4 执行Memcached命令

如果Memcached实例为免密访问模式,连接后可直接执行命令。如果为密码访问模式,连接后需要先执行认证命令:

auth 用户名@密码

认证通过后,即可执行Memcached命令。以下是一个简单的set和get操作示例:

set hello 0 0 6
world!
STORED
get hello
VALUE hello 0 6
world!
END

需要特别注意的是,Memcached文本协议不支持认证操作,因此密码访问模式的实例必须通过二进制协议连接。Telnet使用的是文本协议,所以仅适用于免密访问模式的实例。

5. 使用Java客户端(Spymemcached)连接Memcached

Spymemcached是Java生态中最流行的Memcached客户端之一,支持二进制协议和SASL认证。

5.1 前提条件

  • 已成功创建Memcached实例且状态为“运行中”。
  • 已创建同一VPC内的ECS,并已安装好Java开发环境。

5.2 Maven依赖

在项目的pom.xml中添加Spymemcached依赖:

<dependency>
    <groupId>net.spy</groupId>
    <artifactId>spymemcached</artifactId>
    <version>2.12.3</version>
</dependency>

5.3 密码模式连接代码

以下代码演示了通过SASL认证方式连接密码访问模式的Memcached实例:

import net.spy.memcached.AddrUtil;
import net.spy.memcached.ConnectionFactoryBuilder;
import net.spy.memcached.MemcachedClient;
import net.spy.memcached.auth.AuthDescriptor;
import net.spy.memcached.auth.PlainCallbackHandler;

import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class MemcachedJavaDemo {
    public static void main(String[] args) {
        String host = "{ip_or_domain_name}";
        int port = 11211;
        String userName = "{userName}";
        String password = "{password}";

        try {
            // 配置SASL认证
            AuthDescriptor authDescriptor = new AuthDescriptor(
                new String[]{"PLAIN"},
                new PlainCallbackHandler(userName, password)
            );

            // 创建连接工厂,启用二进制协议和认证
            ConnectionFactoryBuilder builder = new ConnectionFactoryBuilder();
            builder.setProtocol(ConnectionFactoryBuilder.Protocol.BINARY);
            builder.setAuthDescriptor(authDescriptor);

            // 创建Memcached客户端
            MemcachedClient client = new MemcachedClient(
                builder.build(),
                AddrUtil.getAddresses(host + ":" + port)
            );

            // 执行set操作
            client.set("key", 0, "hello world!");
            System.out.println("set('key', 'hello world!') 执行成功");

            // 执行get操作
            Object value = client.get("key");
            System.out.println("get('key') = " + value);

            // 关闭连接
            client.shutdown();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

5.4 免密模式连接代码

如果实例开启了免密访问,可以省略认证配置:

import net.spy.memcached.AddrUtil;
import net.spy.memcached.MemcachedClient;

import java.io.IOException;

public class MemcachedJavaDemo {
    public static void main(String[] args) {
        String host = "{ip_or_domain_name}";
        int port = 11211;

        try {
            MemcachedClient client = new MemcachedClient(
                AddrUtil.getAddresses(host + ":" + port)
            );

            client.set("key", 0, "hello world!");
            System.out.println("set('key', 'hello world!') 执行成功");

            Object value = client.get("key");
            System.out.println("get('key') = " + value);

            client.shutdown();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6. 使用Python客户端(python-binary-memcached)连接Memcached

python-binary-memcached是一个纯Python实现的Memcached客户端,支持二进制协议和SASL认证。

6.1 前提条件

  • 已成功创建Memcached实例且状态为“运行中”。
  • 已创建同一VPC内的ECS,并已安装好Python 2.7.6或更高版本。

6.2 安装依赖包

将获取的python-binary-memcached-x.y.z.zip依赖包上传到ECS,执行以下命令安装:

unzip -xzvf python-binary-memcached-x.y.z.zip
cd python-binary-memcached-x.y.z
python setup.py install

如果安装报错,可使用apt或yum方式安装:

apt install python-pip
pip install python-binary-memcached

6.3 密码模式连接代码

新建Python文件(如dcs_test.py),写入以下代码:

import bmemcached

# 连接Memcached实例,开启密码认证
client = bmemcached.Client(('{ip_or_domain_name}:{port}'), '{userName}', '{password}')

# 执行set操作
print("set('key', 'hello world!')")
print(client.set('key', 'hello world!'))

# 执行get操作
print("get('key')")
print(client.get('key'))

运行该文件:

python dcs_test.py

预期输出结果如下:

set('key', 'hello world!')
True
get('key')
hello world!

6.4 免密模式连接代码

如果实例开启了免密访问,可省略用户名和密码参数:

import bmemcached

# 连接Memcached实例,免密访问
client = bmemcached.Client('{ip_or_domain_name}:{port}')

print("set('key', 'hello world!')")
print(client.set('key', 'hello world!'))

print("get('key')")
print(client.get('key'))

7. 使用PHP客户端(libmemcached)连接Memcached

libmemcached是Memcached的C/C++客户端库,PHP通过其扩展模块可以方便地连接Memcached实例。

7.1 前提条件

  • 已成功创建Memcached实例且状态为“运行中”。
  • 已创建同一VPC内的ECS,并已安装好PHP开发环境。

7.2 安装libmemcached

在ECS上执行以下命令安装libmemcached:

wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -xvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure --prefix=/usr/local/libmemcached
make && make install

安装libmemcached之前需要确保已安装gcc和sasl相关组件,否则编译过程会报错。

7.3 安装PHP memcached扩展

执行以下命令安装PHP memcached扩展:

wget http://pecl.php.net/get/memcached-2.2.0.tgz
tar zxvf memcached-2.2.0.tgz
cd memcached-2.2.0
phpize
./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl
make && make install

7.4 配置PHP扩展

找到pdo.ini文件,增加以下配置:

extension=memcached.so
memcached.use_sasl = 1

7.5 连接代码

新建memcached.php文件,写入以下代码:

<?php
$connect = new Memcached();

// 关闭压缩
$connect->setOption(Memcached::OPT_COMPRESSION, false);
// 使用二进制协议
$connect->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
// 关闭TCP延迟
$connect->setOption(Memcached::OPT_TCP_NODELAY, true);

// 添加服务器
$connect->addServer('{ip_or_domain_name}', {port});

// 如果实例开启了密码访问,需设置SASL认证
$connect->setSaslAuthData('{userName}', '{password}');

// 执行set操作
$connect->set("DCS", "Come on!");
echo 'DCS: ' . $connect->get("DCS") . "\n";

$connect->quit();
?>

运行该文件,预期输出如下:

DCS: Come on!

8. 使用C++客户端(libmemcached)连接Memcached

libmemcached提供了C/C++接口,适合对性能要求较高的C++应用。

8.1 前提条件

  • 已成功创建Memcached实例且状态为“运行中”。
  • 已创建同一VPC内的ECS,并已安装好GCC 4.8.4或更高版本。

8.2 安装libmemcached

安装步骤与PHP部分相同,参考7.2节。

8.3 连接代码示例

#include <libmemcached/memcached.h>
#include <string>
#include <iostream>

int main() {
    // 创建memcached客户端
    memcached_st *memc = memcached_create(NULL);

    // 添加服务器
    memcached_return_t rc;
    rc = memcached_server_add(memc, "{ip_or_domain_name}", {port});
    if (rc != MEMCACHED_SUCCESS) {
        std::cerr << "添加服务器失败: " << memcached_strerror(memc, rc) << std::endl;
        return 1;
    }

    // 如果实例开启了密码访问,设置SASL认证
    // 注意:libmemcached的SASL认证需要额外配置

    // 执行set操作
    const char *key = "key";
    const char *value = "hello world!";
    size_t value_len = strlen(value);
    rc = memcached_set(memc, key, strlen(key), value, value_len, 0, 0);
    if (rc != MEMCACHED_SUCCESS) {
        std::cerr << "set操作失败: " << memcached_strerror(memc, rc) << std::endl;
    } else {
        std::cout << "set('key', 'hello world!') 执行成功" << std::endl;
    }

    // 执行get操作
    size_t return_value_len;
    uint32_t flags;
    char *return_value = memcached_get(memc, key, strlen(key), &return_value_len, &flags, &rc);
    if (rc == MEMCACHED_SUCCESS) {
        std::cout << "get('key') = " << return_value << std::endl;
        free(return_value);
    } else {
        std::cerr << "get操作失败: " << memcached_strerror(memc, rc) << std::endl;
    }

    // 释放资源
    memcached_free(memc);
    return 0;
}

9. Memcached协议与命令详解

华为云DCS Memcached兼容开源Memcached协议,支持基于TCP的文本协议和二进制协议。

9.1 文本协议

Memcached文本协议通过ASCII文本传递命令,便于用户编写客户端和调测问题,甚至可以直接使用Telnet连接。文本协议与二进制协议相比,兼容更多的开源类型客户端,但文本协议不支持认证操作。因此,文本协议仅适用于免密访问模式的实例。

华为云DCS Memcached对文本协议命令的支持情况如下:

  • add:新增数据
  • set:设置数据(新增或修改)
  • replace:更新数据
  • append:向指定key的value末尾追加数据
  • prepend:向指定key的value头部追加数据
  • cas:检查并修改数据
  • get:查询数据
  • gets:查询数据详细信息
  • delete:删除数据
  • incr:算数增
  • decr:算数减
  • touch:修改数据过期时间
  • quit:断开连接
  • flush_all:清空数据(delay参数必须为0)
  • version:查询服务版本信息
  • stats:运行统计信息管理(仅支持基础统计信息)

9.2 二进制协议

Memcached二进制协议将命令及所操作的内容按照特定结构进行编码后发送,通过预定的字节串表示命令。二进制协议与文本协议相比,功能更多,支持SASL认证更加安全。密码访问模式的Memcached实例必须使用二进制协议连接。

华为云DCS Memcached对二进制协议命令的支持情况如下:

  • 0x00 GET:查询数据
  • 0x01 SET:设置数据(新增或修改)
  • 0x02 ADD:新增数据
  • 0x03 REPLACE:更新数据
  • 0x04 DELETE:删除数据
  • 0x05 INCREMENT:算数增
  • 0x06 DECREMENT:算数减
  • 0x07 QUIT:断开连接
  • 0x08 FLUSH:清空数据(delay参数必须为0)
  • 0x09 GETQ:查询数据(错误时不返回信息)
  • 0x0a NOOP:空操作(相当于ping)
  • 0x0b VERSION:查询服务版本信息
  • 0x0c GETK:查询数据并返回key
  • 0x0d GETKQ:查询数据并返回key(错误时不返回信息)
  • 0x0e APPEND:向指定key的value末尾追加数据
  • 0x0f PREPEND:向指定key的value头部增加数据
  • 0x10 STAT:查询缓存实例的统计信息(仅支持基础统计信息)

10. 实例日常运维与管理

10.1 变更规格

DCS管理控制台支持变更Memcached缓存实例规格,即扩容或缩容。您可以根据业务实际需要,选择合适的实例规格。实例变更规格不会影响实例的连接地址、访问密码及安全组配置等信息,也不需要重启实例。

10.2 备份与恢复

主备类型的Memcached实例支持自动备份功能。您可以在创建实例时开启自动备份,并设置备份策略。备份数据可在实例故障时用于数据恢复。

10.3 监控与告警

华为云DCS提供了丰富的监控指标,包括CPU使用率、内存使用率、连接数、QPS等。您可以在云监控服务中查看这些指标,并设置告警规则,以便及时发现和处理异常情况。

11. 安全配置建议

为保障Memcached实例的数据安全,建议遵循以下最佳实践:

  • 启用密码访问:生产环境务必选择密码访问模式,避免实例被未授权访问。
  • 使用二进制协议:密码访问模式必须使用二进制协议,二进制协议支持SASL认证,更加安全。
  • 合理配置安全组:通过安全组规则限制访问来源IP,仅允许必要的ECS访问Memcached实例。
  • 定期更新密码:定期更换实例访问密码,降低密码泄露风险。
  • 开启自动备份:主备实例建议开启自动备份,以防数据丢失。

12. 常见问题解答

问1:Memcached实例支持公网访问吗?
答:华为云DCS Memcached实例默认部署在VPC内部网络中,不支持直接通过公网访问。如需从外部访问,可以通过VPN或专线等方式打通网络。

问2:密码访问模式的实例为什么不能用Telnet连接?
答:Telnet使用的是Memcached文本协议,而文本协议不支持认证操作。密码访问模式的实例必须使用二进制协议进行SASL认证。如需使用Telnet调试,可临时开启免密访问,但调试完成后应立即关闭。

问3:DCS Memcached支持哪些数据结构?
答:Memcached本身仅支持key-value结构,value为字符串类型。如果需要更丰富的数据结构(如列表、哈希、集合等),建议使用华为云DCS Redis实例。

问4:Memcached实例的数据如何迁移?
答:由于Memcached本身没有命令可遍历查询所有数据,无法直接从正在使用的Memcached中导出全量数据。建议通过应用程序写日志的方式记录缓存key,同时提取key-value,逐步写入目标实例完成数据迁移。

问5:实例规格变更会影响业务吗?
答:DCS管理控制台支持在线变更规格,变更过程中不会影响实例的连接地址、访问密码及安全组配置,也不需要重启实例,因此对业务无影响。

问6:DCS Memcached与自建Memcached有什么区别?
答:DCS Memcached是华为云提供的托管式缓存服务,无需自行部署和维护服务器。DCS提供了高可用架构、自动故障切换、监控告警、备份恢复等企业级特性,相比自建方案更加稳定和易用。

相关文章

华为云服务器购买怎么便宜?小公司省钱攻略来了!这样买立省好几千​

华为云服务器购买怎么便宜?小公司省钱攻略来了!这样买立省好几千​

很多朋友都在吐槽:“华为云服务器太贵了,预算有限实在买不起!” 其实,买华为云服务器贵不贵,关键看你会不会选、会不会买。今天就来给大家分享一套超实用的省钱攻略,小公司、创业团队也能轻松用得起稳定又安全…

华为云服务器采购总嫌贵?30%华为云返点返佣 + 旗舰级代理保障,这波省钱操作别错过!

华为云服务器采购总嫌贵?30%华为云返点返佣 + 旗舰级代理保障,这波省钱操作别错过!

最近不少做 IT 运维或企业采购的朋友跟我吐槽,公司要上华为云服务器,去官网一看报价直接犯了难 —— 按年付费算下来,比预期预算高出不少。要是赶上业务扩张需要多台服务器,这笔开支更是让财务部门直皱眉。…

2026华为云返点返佣政策深度解析:头部代理返佣优势与企业合作指南

2026华为云返点返佣政策深度解析:头部代理返佣优势与企业合作指南

上海汪远信息科技有限所在公司年销华为云产品3亿+,属于头部代理梯队,可为合作客户提供最高30%的返佣优惠,直接帮助企业降低30%的云资源成本。…

华为云代理商有哪些?华为云代理返点是真的么?

华为云代理商有哪些?华为云代理返点是真的么?

一,华为云代理商简介华为云代理商,顾名思义就是替华为云做华为云服务器数据库等公有云产品推广的代理商,每推广出一单华为云服务器,华为云会跟这个代理商结算佣金,佣金比例分为月度佣金,季度佣金和年度佣金,华…

2026华为云返点返佣政策深度解析:头部代理返佣优势与企业合作指南

2026华为云返点返佣政策深度解析:头部代理返佣优势与企业合作指南

一、华为云代理商的核心价值定位1. 代理商的角色与职责华为云代理商作为华为云生态的核心合作伙伴,承担着三重核心职能:•产品推广销售:负责推广销售华为云全系列云产品,包括云服务器ECS、云数据…

上海汪远信息:年销1.5亿+的头部华为云代理商,10年深耕为企业上云保驾护航

上海汪远信息:年销1.5亿+的头部华为云代理商,10年深耕为企业上云保驾护航

核心摘要本文深度解析华为云代理商行业现状,揭示小代理商生存困境的核心原因(业绩压力大、垫资周期长、资金链脆弱),重点推荐上海汪远信息科技有限公司——一家拥有10年华为云代理经验、年销量超1.5亿的全国…