Memcached
Memcached 是一个高性能的分布式内存对象缓存系统,全世界有不少公司采用这个缓存系统来构建大负载的网站,以分担数据库的压力。Memcached 是通过在内存里维护一张统一的、巨大的 Hash 表来存储各种各样的数据,包括图像、视频、文件以及数据库检索的结果等。简单地说,就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。因为 Memcached 是把数据存储到内存中,并且不具有自动同步数据的功能,所以不建议存储一些非常重要的数据,以免因为机器故障导致数据丢失。Memcached 的存储方式是以键-值对的方式存储。
安装Memcached
Memcached 官方只提供了 Linux 系统的安装包,作为练习,我们可以使用社区版提供的 Windows 版本。这里以 Windows 系统和 Ubuntu 系统为例讲解 Memcached 的安装和基本使用。
Windows系统
因为 Memcached 官方没有提供 Windows 版本,所以只能用社区版,读者可以到 https://www.runoob.com/Memcached/window-install-memcached.html 下载 Windows 版的 Memcached,下载完成后解压可以得到以下文件,如图 8-1 所示。

在 cmd 命令行终端输入以下命令完成安装和启动。
-
安装:memcached.exe -d install。
-
启动:memcached.exe -d start。
Linux系统(Ubuntu)
因为 Memcached 官方是支持 Linux 系统的,所以在 Ubuntu 系统中可以直接使用 apt 命令完成安装。在 Ubuntu 系统中安装和启动的命令如下。
-
安装:sudo apt install memcached。
-
启动:/usr/bin/memcached -d start。
在启动 Memcached 时,还可以传递以下参数配置 Memcached 的运行方式。
-
-d:让 Memcached 在后台运行。
-
-m:指定占用多少内存,以 MB 为单位,默认是 64MB。
-
-p:指定运行监听的端口号,默认的端口号是 11211。
-
-l:如设置 -l0.0.0.0,表示允许其他机器通过本机 IP 地址连接到本机的 Memcached,默认只能本机连接。
telnet操作Memcached
Linux 和 Windows 系统都有 telnet 命令,以下命令都是在 Linux 的终端和 Windows 的 cmd 终端中完成的。在 Memcached 启动的前提下,在终端或者 cmd 中,输入 telnet 127.0.0.1 11211,即可进入 Memcached 命令界面。如果要连接其他机器的 Memcached,则把 127.0.0.1 改成目标机器的 IP 地址即可,并且目标机器在运行时,需要通过 -l 参数设置允许其他机器连接的状态。下面对在 Memcached 中使用的命令进行讲解。
set命令
使用 set 命令可以将数据添加到 Memcached 中,如果数据的键在 Memcached 中已存在,则会进行替换,语法如下。
set key zip timeout value_length
参数的说明如下。
-
key:此数据的键。
-
zip:是否压缩数据。
-
timeout:过期时间,单位为 s。
-
value_length:值的长度。
示例命令如下。
$ set username 0 60 7
$ zhiliao
以上命令,我们设置了键为 username 的数据,过期时间为 60s 后,值的总长度为 7。
Python操作Memcached
使用 Python 操作 Memcached 需要先安装 python-memcached,安装命令如下。
pip install python-memcached
安装完 python-memcached 包以后,就可以使用它来连接 Memcached 服务并操作 Memcached 了。下面介绍一下相关操作。
建立连接
建立连接,示例代码如下。
import memcache
mc = memcache.Client(['127.0.0.1:11211'],debug=True)
上述代码中,首先导入了 memcache 模块,然后使用 memcache.Client 类创建了一个对象,并设置了连接到哪个 Memcached 服务器,而且为了更好地看到调试 Memcached 操作代码,设置 debug=True。后续对 Memcached 执行的操作,都是通过 memcache.Client 对象 mc 来实现的。
Memcached的安全性
Memcached 的操作不需要任何用户名和密码,只需要知道 Memcached 服务器的 IP 地址和端口号即可。因此使用 Memcached 时尤其要注意安全性。这里提供了以下两种安全的解决方案。
-
使用 -l 参数设置只有本地可以连接:这种方式就只能通过本机连接,其他机器都不能访问,可以达到最好的安全性。
-
使用防火墙关闭对外的 11211 端口:外网无法访问到本机的 11211 端口,也就无法访问到 Memcached 服务。这里以 Ubuntu 系统为例,设置防火墙相关的命令如下。
ufw enable # 开启防火墙 ufw disable # 关闭防火墙 ufw default deny # 防火墙以禁止的方式打开,默认是关闭那些没有开启的端口 ufw deny 端口号 # 关闭某个端口 ufw allow 端口号 # 开启某个端口