一、Memcached 介绍
Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.
Memcached is simple yet powerful. Its simple design promotes quick deployment, ease of development, and solves many problems facing large data caches. Its API is available for most popular languages.
以上内容来自 Memcached 官网: http://memcached.org/
大致意思是:Memcached 是一个免费开源的基于内存的分布式缓存系统,使用它来作为我们的 Web 应用的缓存(包括字符串,对象,页面等等)以减少 Web 应用对数据库的负载。Memcached 的存储数据格式是键值对的方式进行存储在内存中。
Memcached 官网:
http://memcached.org/
GitHub 源码地址:
https://github.com/memcached/memcached
Wiki 文档地址:
https://github.com/memcached/memcached
二、安装环境
- CentOS 6.7 x64 Linux
- libevent
- memcached
注:
- 由于 Memcached 是基于 libevent (an event notification library) 事件驱动库,因此需要依赖 libevent 库。Libevent 官方如下:
http://libevent.org/
- 本文下方的安装过程中均使用 root 用户操作
- 本文部分内容参考是官方的安装文档,官方安装文档地址如下
https://github.com/memcached/memcached/wiki/Install
三、yum 安装 Memcached
3.1 安装
root 用户 使用 yum 包管理工具安装
[root@localhost ~]# yum install memcached
...
Dependencies Resolved
===================================================================
Package Arch Version Repository Size
===================================================================
Installing:
memcached x86_64 1.4.4-5.el6 base 69 k
Installing for dependencies:
libevent x86_64 1.4.13-4.el6 base 66 k
Transaction Summary
===================================================================
Install 2 Package(s)
Total download size: 134 k
Installed size: 374 k
Is this ok [y/N]: y
...
从上面信息可以看到,在低版本的系统 yum 仓库中维护的包版本会比较低。如果想要安装最新的软件包,可能需要更新 yum 的源。
3.2 启动
[root@localhost ~]# service memcached start
Starting memcached: [ OK ]
3.3 验证
[root@localhost ~]# ps -ef | grep memcached
496 44981 1 0 17:35 ? 00:00:00 memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid
从运行的进程可以看到,memcached 已经正常运行了。其中,启动参数介绍如下:
-d 选项是启动一个守护进程
-m 是分配给 Memcached 使用的内存数量,单位是 MB,默认是 64MB
-u 是运行 Memcached 的用户,默认是 memcached
-l 是监听的服务器 IP 地址,如果有多个地址的话
-p 是设置 Memcached 监听的端口,默认是 11211
-c 选项是最大运行的并发连接数,默认是 1024,按照服务器的负载量来设定
-P 是设置保存 Memcached 的 pid 文件,默认保存在 /var/run/memcached/memcached.pid
3.4 配置参数
查看配置文件
执行如下命令查看 memcached 的配置文件:
[root@localhost ~]# rpm -qc memcached
/etc/sysconfig/memcached
查看默认参数
使用 yum 安装的 memcached 的默认配置参数如下:
[root@localhost ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
配置自定义参数
可以编辑 /etc/sysconfig/memcached
文件来配置自定义的 memcached 运行参数,保存退出,如下示例:
[root@localhost ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="root"
MAXCONN="1024"
CACHESIZE="128"
OPTIONS=""
重启 memcached
[root@localhost ~]# service memcached restart
Stopping memcached: [ OK ]
Starting memcached: [ OK ]
验证
[root@localhost ~]# ps -ef | grep memcached | grep -v grep
root 45088 1 0 18:07 ? 00:00:00 memcached -d -p 11211 -u root -m 128 -c 1024 -P /var/run/memcached/memcached.pid
可以看到配置的自定义参数已经生效。
3.5 配置开机自启动
查看 chkconfig 状态
[root@localhost ~]# chkconfig | grep memcached
memcached 0:off 1:off 2:off 3:off 4:off 5:off 6:off
配置 chkconfig
执行如下命令,配置 memcached 的开机自启
[root@localhost ~]# chkconfig memcached on
验证 chkconfig 配置
[root@localhost ~]# chkconfig | grep memcached
memcached 0:off 1:off 2:on 3:on 4:on 5:on 6:off
注:
- memcached 开机自启的配置文件位于
/etc/rc.d/init.d/memcached
,可以编辑此文件中的配置参数来自定义。
3.6 其他操作
当我们使用 yum 命令安装了一个软件包时,感觉好像我们一下子不知道该怎么操作了,软件包安装到哪儿了,怎么启动,怎么配置?
这些问题我们可以通过在 yum 安装完成后执行如下命令查看安装的软件包资源位置。
如下示例:
[root@localhost ~]# rpm -ql memcached
/etc/rc.d/init.d/memcached
/etc/sysconfig/memcached
/usr/bin/memcached
/usr/bin/memcached-tool
/usr/share/doc/memcached-1.4.4
/usr/share/doc/memcached-1.4.4/AUTHORS
/usr/share/doc/memcached-1.4.4/CONTRIBUTORS
/usr/share/doc/memcached-1.4.4/COPYING
/usr/share/doc/memcached-1.4.4/ChangeLog
/usr/share/doc/memcached-1.4.4/NEWS
/usr/share/doc/memcached-1.4.4/README
/usr/share/doc/memcached-1.4.4/protocol.txt
/usr/share/doc/memcached-1.4.4/readme.txt
/usr/share/doc/memcached-1.4.4/threads.txt
/usr/share/man/man1/memcached.1.gz
/var/run/memcached
rpm -ql
命令会列举出已安装的软件包的相关资源,此命令不仅适用于使用 yum 安装的 memcached 软件包,也适用于其他 yum 安装的软件包。
四、源码安装 Memcached
4.1 安装 libevent-devel
如前方提到的 Memcached 依赖于 libevent,因此需要 libevent。root 用户执行如下命令查看是否已经安装了 libevent-devel
[root@localhost memcached-1.5.9]# rpm -qa libevent-devel
如果已经安装 libevent-devel
执行如下命令查看 libevent-devel 的安装目录,并记录下来以供后面安装 memcached 使用。
[root@localhost memcached-1.5.9]# rpm -ql libevent-devel
/usr/bin/event_rpcgen.py
/usr/lib64/libevent.a
/usr/lib64/libevent.so
/usr/lib64/libevent_core.a
/usr/lib64/libevent_core.so
/usr/lib64/libevent_extra.a
/usr/lib64/libevent_extra.so
/usr/share/man/man3/evdns.3.gz
/usr/share/man/man3/event.3.gz
此处可以看到, libevent-devel 被安装到 /usr/lib64/ 目录下了(以 libevent 动态链接来确定)
如果没有安装 libevent-devel
执行如下命令安装 libevent-devel
[root@localhost memcached-1.5.9]# yum install libevent-devel
同上获取 libevent-devel 的安装位置,yum 安装的 libevent-devel 可以不用指定 libevent-devel 安装位置,不过此处建议都手动方式获取 libevent-devel 的安装位置并在正文安装时指定,以免被绕晕...
4.2 下载 Memcached
如下使用 wget 进行下载,当然也可以使用其他方式下载,此处不表。
[root@localhost memcached]# wget http://memcached.org/files/memcached-1.5.9.tar.gz
注:
- 上面的链接中 1.5.9 表示 memcached 的版本,这是当前的最新版本,如果需要安装其它版本,可以参考官方发版记录中的信息
https://github.com/memcached/memcached/wiki/ReleaseNotes
- 如果只想安装最新的版本,可以将上面的下载 URL 改为
wget https://memcached.org/latest
,如下所示:
[root@localhost memcached]# wget http://memcached.org/lastest
[root@localhost memcached]# tar -zxvf lastest
4.3 解压
解压方式也很简单,前面下载的是 .tar.gz 格式的包,因此使用 tar 来解压。如果下载的是 .zip 文件,则使用 unzip 来解压,此处不多列举。
[root@localhost memcached]# pwd
/data/software/memcached
[root@localhost memcached]# tar zxvf memcached-1.5.9.tar.gz
4.4 编译
进入解压后的文件目录,并指定 libevent-devel 的安装位置来编译 memcached 并指定 memcached 的安装目录。
[root@localhost memcached]# cd memcached-1.5.9
[root@localhost memcached-1.5.9]# ./configure --with-libevent=/usr/lib64/ --prefix=/usr/local/memcached
注:
- --with-libevent=/usr/lib64/ 表示的是指定 libevent 的安装目录,以上文中使用 rpm -ql 查看获取的 libevent-devel 为准
- --prefix=/usr/local/memcached 表示指定 memcached 的安装目录
- 此命令执行后,并未安装 memcached 到 /usr/local/memcached/ 目录
4.5 安装
编译成功后,直接执行如下命令即可安装。
[root@localhost memcached-1.5.9]# pwd
/data/software/memcached/memcached-1.5.9
[root@localhost memcached-1.5.9]# make && make install
4.6 Memcached 的启动
启动方式也非常简单,如下示例:
[root@localhost memcached-1.5.9]# /usr/local/memcached/bin/memcached -d -m 128 -p 11211 -u root
启动参数前方有介绍,此处不再赘述。
4.7 验证 memcached
执行如下命令查看 memcached 的进程情况
[root@localhost memcached-1.5.9]# ps -ef | grep memcached | grep -v grep
root 49417 1 0 18:55 ? 00:00:00 /usr/local/memcached/bin/memcached -d -m 128 -p 11211 -u root
五、Memcached 简单使用
由于 Memcached 是基于文本行协议,因此我们可以方便地使用 Memcached,比如通过 telnet 我们就能实现对 Memcached 中的数据的读写。
[root@localhost memcached-1.5.9]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
set foo 0 0 11
hello world
STORED
get foo
VALUE foo 0 11
hello world
END
注:
set foo 0 0 11 命令的简单解释
set:设置键值的关键字,向 memcached 写入数据时的关键字。
foo:向 memcached 写入数据 key,前面提到过 memcached 是基于键值(key-value)的存储数据格式。
0:第一个 0 是 flags 值,32 位无符号整数,用于数据检索,由用户提供,并会在 memcached 中存储
0:第二个 0 是 exptime 的值,过期时间,以秒表示。0 表示不过期,如果 exptime 大于 30 天,Memcached 将使用它作为 UNIX 时间戳过期。
11:11 是指定要写入 memcached 数据块中的数据值的大小( bytes )。比如,hello world 每一个字母占一个字节(含空格),就是 11 字节。
noreply: (可选参数) 告知服务器不发送回复。set foo 0 0 11 执行成功后,会新起一行接受输入数据值,输入后按 "Enter" 键,如果 返回 STORED 表示成功,返回 ERROR 表示写入失败
get foo 命令比较简单,表示获取数据, get 为关键字,foo 是键(key),不再细述。
六、总结
此文介绍了 CentOS 6.x 下 Memcached 的两种安装方式:一种是 yum 安装,另一种是源码编译安装。总体来说都非常简单。
如果你不需要追求最新版本,那么推荐使用 yum 安装,因为整体安装方便且简单。而如果你对版本有要求而且又需要实现更多的自定义功能,那么建议使用源码编译安装。
另外,此文只是介绍了 Memcached 的安装及简单使用(本地),包括防火墙配置,远程客户端连接及使用,项目中的实际使用场景等等将在后续的文章中进行介绍。
附录: Memcached 启动脚本
[root@localhost memcached]# vi startup.sh
脚本内容如下:
#! /bin/sh
echo "Start to start memcached server $(date)..."
MEMCACHED=/usr/local/memcached/bin/memcached
usage()
{
echo "usage: `basename $0` port"
}
if [ -n "$1" ]
then
{
pid=`ps aux|grep memcached|grep "$1" |grep -v grep|awk '{print $2}'`
if [ -n "$pid" ]
then
{
sleep 2
echo "kill memcached which port is $1 begin"
echo "pid:$pid"
kill -9 $pid
echo "kill memcached which port is $1 end"
sleep 2
}
fi
echo "begin to start memcached in port $1"
LOG_FILE=/var/log/memcached/memcached_$1.log
rm -f $LOG_FILE
$MEMCACHED -d -p $1 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid >> $LOG_FILE 2>&1
echo "start memcached end"
tail -f $LOG_FILE
}
else
{
usage
exit 1
}
fi
赋权限
[root@localhost memcached]# chmod 755 startup.sh
执行:
[root@localhost memcached]# ./startup.sh 11211
其中 11211 是指定的 Memcached 的运行端口