centos7里memcached 的安装使用
memcahced 的概述
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
Memcached 服务端安装、PHP 客户端集成与 Telnet 交互操作
-
掌握 CentOS 7 环境下 Memcached 服务端的安装与配置
-
学习通过 PHP 扩展连接和操作 Memcached
-
熟悉 Telnet 命令行工具与 Memcached 的交互操作
-
理解 Memcached 的基本数据操作(存储、查询、追加、删除)
(1)memcached 服务端安装
在centos 7上做,有对应的安装包
1. 安装 Memcached
# 启用EPEL仓库并安装
sudo yum install -y epel-release
sudo yum install -y libevent memcached libmemcached
注:libevent 是memcached 的依赖;libmemcached 是memcached 的库和工具
2. 核心配置文件
编辑 /etc/sysconfig/memcached
,调整以下参数:
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0 -t 4 -c 2048"
如果想监听特定的IP
可将OPTIONS行修改
例如:
OPTIONS="-l 10.1.1.79 -t 4 -c 2048"
参数解释:
# Memcached 服务配置文件
# 监听的端口号(默认11211)
PORT="11211"
# 运行 memcached 的系统用户(建议使用专用用户)
USER="memcached"
# 最大并发连接数
MAXCONN="1024"
# 缓存大小(内存分配)(单位:MB)
CACHESIZE="64"
# 其他启动选项:
# - -l 0.0.0.0 : 监听所有网络接口
# - -t 4 : 使用4个工作线程
# - -c 2048 : 每个线程的最大连接数
OPTIONS="-l 0.0.0.0 -t 4 -c 2048"
# 其他常用可选参数:
# - -m 64 : 分配的内存大小(MB)(已在CACHESIZE中设置)
# - -U 11211 : UDP监听端口(默认同TCP端口)
# - -s /tmp/memcached.sock : UNIX socket路径
# - -d : 以守护进程方式运行(systemd服务中不需要)
3. 启动与自启
#相关指令
sudo systemctl start memcached
sudo systemctl enable memcached
sudo systemctl stop memcached
netstat -naptl |grep memcached
#查看对应进程
netstat -naptl |grep memcached
注:netstat 网络指令来源于net-tools ;
#查看版本,是否已存在
netstat --version#若不存在,可进行下载
sudo yum install net-tools # CentOS 7 或更早版本
4. 防火墙放行
sudo firewall-cmd --add-port=11211/tcp --permanent
sudo firewall-cmd --reload#注意也可以执行以下命令关闭防火墙(centos7中若要关闭防火墙两个都要关,具体使用规则可查看本人其他博客)
systemctl stop firewalld
systemctl stop iptables
5.命令行工具(libmemcached-tools)
命令 | 作用 | 示例 |
---|---|---|
memstat | 查看服务器状态 | memstat --servers=127.0.0.1 |
memcat | 读取键值 | memcat --servers=127.0.0.1 key1 |
memflush | 清空所有数据 | memflush --servers=127.0.0.1 |
6. 验证服务
sudo yum install nmap-ncat -y
echo stats |nc 127.0.0.1 11211 |grep version或者
sudo yum install telnet -y
telnet 127.0.0.1 11211
version
stats
quit
7.日志管理
# 跟踪实时日志
journalctl -u memcached -f
![]()
如果日志报错,可从查看配置文件Memcached是否有错,重启服务,查找并释放被占用的端口,清理历史错误日志等方向排错
若报错如下
报错:4月 24 09:01:30 hn79 memcached[5027]: failed to listen on TCP port 11211: Address already in use
解决:强制终止占用端口的进程
sudo ss -tulnp | grep 11211 # 查看占用进程PID
sudo kill -9 <PID> # 终止该进程确保Memcached独占端口
sudo systemctl restart memcached报错:4月 24 08:54:47 hn79 memcached[4232]: failed to listen on TCP port 11211: No such file or directory
解决:确保Memcached配置正确
cat /etc/sysconfig/memcached
确保有这样一行
OPTIONS="-l 0.0.0.0" # 监听所有IP,或改为明确的IP如"-l 127.0.0.1"
验证:
sudo systemctl restart memcached
sudo systemctl status memcached # 确认状态为active仍然报错可选择清理错误历史日志
sudo journalctl --vacuum-time=1h
再次查看日志
sudo journalctl -u memcached -f
(2)php支持memcached(以PHP为例)
链接成功!Hello Memcached[root@gyh gtest]# 如何去执行这个步骤
以下是执行 PHP 连接 Memcached 的完整步骤指南,包含详细操作和验证方法:
1. 安装 PHP Memcached 扩展
# 安装EPEL源和PHP扩展
sudo yum install -y epel-release
sudo yum install -y php-pecl-memcached php php-cli# 验证扩展是否加载
php -m | grep memcached # 应输出"memcached"
2. 创建测试脚本
cat > test.php <<'EOF'
<?php
$memcached = new Memcached();
$memcached->addServer('127.0.0.1', 11211); # 改为你的Memcached服务器IPecho "连接状态: " . ($memcached->getStats() ? "成功" : "失败") . "\n";// 存储数据
$memcached->set('key', 'Hello Memcached', 3600);// 读取数据
echo "获取数据: " . $memcached->get('key') . "\n";// 删除数据
$memcached->delete('key');// 清空所有缓存(慎用)
// $memcached->flush();
?>
EOF
3. 执行测试脚本
php test.php
预期输出:
连接状态: 成功
获取数据: Hello Memcached
(3) Memcached Telnet 交互练习示例
分步练习操作
(按顺序执行以下命令,# 后为注释)
telnet 127.0.0.1 11211 # 连接到Memcached操作1:存储键值对
set name 0 0 3 # 存储键为name的值,flag=0, 过期时间=0, 长度=3
hen # 输入值内容(3字节)
预期响应:STORED操作2:追加数据
append name 0 0 2 # 向name追加数据,长度=2
11 # 追加内容(2字节)
预期响应:STORED操作3:查询数据
get name # 获取name的值
预期响应:
VALUE name 0 5
hen11 # 合并后的值
END操作4:存储新键
set age 0 0 3 # 存储键age
021 # 输入值
预期响应:STORED操作5:批量查询
get name age # 同时获取name和age
预期响应:
VALUE name 0 5
hen11
VALUE age 0 3
021
END操作6:删除数据
delete age # 删除键age
预期响应:DELETED操作7:验证删除
get age # 再次查询age
预期响应:END(表示不存在)退出Telnet
quit # 断开连接
实验总结
本次实验完整实现了 Memcached 服务端的安装配置、PHP 客户端集成及命令行交互操作,验证了其作为高性能内存缓存系统的核心功能。关键收获包括:
-
配置灵活性:通过
OPTIONS
参数可灵活控制线程数、连接数和监听范围。 -
跨语言支持:PHP 扩展提供了便捷的 API,适合 Web 应用集成。
-
协议简洁性:Telnet 交互模式直观展示了 Memcached 的文本协议,便于调试。