如何使用Memcached服务 ######################## 概述 ======== 在使用Memcached服务前,您需要先在服务面板里创建自己的Memcached。 以下是和Memcached服务使用相关的环境变量: ================= ================================================ MEMCACHE_SERVERS Memcache服务的服务器列表 ACCESSKEY 应用的AccessKey(当前应用的Memcache认证的用户名) SECRETKEY 应用的SecretKey(当前应用的Memcache认证的密码) ================= ================================================ .. _docker-memcached-nodejs: NodeJS ========== 您可以使用任何支持 `SASL `_ 的nodejs memcache客户端。我们推荐使用 `memjs `_ 。 安装并添加依赖到package.json: .. code-block:: console $ npm install --save memjs 使用: .. code-block:: javascript var memjs = require('memjs'); var mc = memjs.Client.create(process.env.MEMCACHE_SERVERS, { username: process.env.ACCESSKEY, password: process.env.SECRETKEY, }); mc.set('foo', 'bar'); mc.get('foo', function (err, value, key) { if (value != null) { console.log(value.toString()); } }); `完整代码示例 `__ .. _docker-memcached-go: Go ========= .. _docker-memcached-java: Java ========= 首先您要选择一个支持SASL协议的客户端,我们推荐您使用 `xmemcached `_ 客户端,在 *pom.xml* 文件中引入即可。 .. code-block:: xml com.googlecode.xmemcached xmemcached 2.2.1-beta 使用: .. code-block:: java MemcachedClientBuilder builder; MemcachedClient client; builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(System.getenv("MEMCACHE_SERVERS"))); builder.addAuthInfo(AddrUtil.getOneAddress(System.getenv("MEMCACHE_SERVERS")), AuthInfo.plain(System.getenv("ACCESSKEY"), System.getenv("SECRETKEY"))); builder.setCommandFactory(new BinaryCommandFactory()); builder.setFailureMode(false); try { client = builder.build(); } catch (IOException e) { e.printStackTrace(); } .. note:: 之前使用的spymemcached的客户端,因为有一个节点选择的bug没有修复,所以这里不推荐了,这里为大家推荐xmemcached,但是这里有个问题,这里的MemcachedClient实例,如果没有特殊的需要,在应用中最好只初始化一个,如果频繁的初始化MemcachedClient实例,可能会导致容器OOM。 .. _docker-memcached-python: Python ========= 您可以使用 `pylibmc `_ 来作为Memcache客户端。 安装pylibmc: .. code-block:: console $ pip install pylibmc 您需要将 ``pylibmc`` 加入 ``requirements.txt`` 中,告诉容器云的构建程序在构建的时候安装pylibmc。 使用: .. code-block:: python import pylibmc servers = os.environ.get('MEMCACHE_SERVERS', '').split(',') user = os.environ.get('ACCESSKEY', '') password = os.environ.get('SECRETKEY', '') mc = pylibmc.Client(servers, binary=True, username=user, password=pass, behaviors={ "tcp_nodelay": True, "no_block": True, # 设置get/set的超时时间 "_poll_timeout": 2000, }) mc.set("foo", "bar") print mc.get("foo") .. note:: 我们推荐您使用pylibmc来作为Memcache客户端以获取最好的性能,但是pylibmc安装依赖于libmemcached扩展,如果你在本地安装pylibmc有问题,也可以使用一个纯Python的支持SASL的客户端: `python-binary-memcached `_ 。