开发人员学Linux(12):CentOS7安装配置Memcached和Redis

1.前言php

上一篇讲述了持续集成工具Jenkins的使用,本篇讲述如今比较流行的两个NoSQL数据库Memcached和Redis的安装和使用。html


Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它经过在内存中缓存数据和对象来减小读取数据库的次数,从而提升动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的HashMap。其守护进程(daemon )是用C写的,可是客户端能够用任何语言来编写,并经过memcached协议与守护进程通讯。作过Java或C#中Web应用的能够把它类比于application这个对象,至关于一个内存中的字典,能够实现根据key到value的快速映射查询,所不一样的是application对象中缓存的数据只能供同一个进程内的其它对象访问,而Memcached能够提供给跨服务器的其它进程访问。node

Redis是一个key-value存储系统。和Memcached相似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操做,并且这些操做都是原子性的。在此基础上,redis支持各类不一样方式的排序。与memcached同样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操做写入追加的记录文件,而且在此基础上实现了master-slave(主从)同步。nginx

整体说来,同为Key-Value类型的存储系统,Memcached与Redis有几个大的不一样之处:git

身份验证:Memcached不支持身份验证,Redis支持简单身份验证;github

持久化:Memcached不支持持久化,Redis支持持久化;web

存储类型:Memcached进支持string(字符串),Redis支持string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。redis

内存占用:在Memcached中全部没有过时的数据都会在内存中保存,而在Redis中并非全部数据一直保存在内存中,Redis会根据必定算法将不经常使用的value写入到硬盘中(与key有关的数据会一直保存在内存中);算法

分布式:Memcached自己没有带分布式功能,须要客户端实现分布式算法(比较经常使用的是一致性哈希算法,consistent hashing),而Redis的分布式由服务器端来实现。sql

事务性:Memcached自己没有事务的概念,可是能够经过CAS协议来保证一致性;Redis引入数据库中的事务概念来保证数据的完整性和一致性。


本人在项目中都用过这两种NoSQL,下面讲一讲它们的安装和使用。


2.准备

2.1.libevent-2.1.8

这是Memcached的依赖库,须要在编译安装Memcached以前编译安装好,下载地址为:https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz。

2.2.Memcached

官方网址为:http://memcached.org/,最新版为1.5.2,下载地址:http://memcached.org/files/memcached-1.5.2.tar.gz。

2.3.Redis

官方网址为:https://redis.io/,最新版本为4.0.2,下载地址为:http://download.redis.io/releases/redis-4.0.2.tar.gz。

2.4 PHP版Memcached管理程序memcache

注意这个不是指Memcached程序,而是一个用PHP编写的Memcached服务器端工具,体积至关小仅仅就一个网页,须要的能够从https://gitee.com/zhoufoxcn/MemcachedMonitor.git下载,那一个php网页便是。另外一个ASPX文件是本人写过的一个单网页版ASP.NET服务器端程序。

注:还有一个比较有名的PHP网页管理程序叫MemAdmin,网址是:http://www.junopen.com/memadmin/,下载地址为:http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz,安装的时候须要安装PHP memcache扩展,过程稍微复杂一些,但功能也多一些。

2.5.PHP版Redis管理程序phpRedisAdmin

这是一个php脚本编写的redis管理工具,git版本库地址为:https://github.com/erikdubbelboer/phpRedisAdmin,这个工具还须要另一个php库支持,它的git版本库地址为https://github.com/nrk/predis.git,具体作法就是将predis库放在phpRedisAdmin目录下的vendor子目录下便可。固然也可使用Redis Desktop Manager,这个一个非Web管理工具,支持常见的操做系统。

提示:在安装过程当中常常会遇到提示运行make test,在编译安装Redis时若是你运行make test会获得提示“You need tcl 8.5 or newer in order to run the Redis test”,能够经过命令“yum install –y tcl”来安装。

3.编译安装

假定libevent-2.1.8-stable.tar.gz、memcached-1.5.2.tar.gz及redis-4.0.2.tar.gz都下载后放在服务器/root目录下。

3.1编译安装libevent

首先检查有没有安装libevent

rpm -q libevent

若是有,则运行以下命令卸载:

rpm -e --nodeps libevent-2.0.21-4.el7.x86_64


接着就运行下面的命令来编译安装libevent了。

cd /root

tar zxvf libevent-2.1.8-stable.tar.gz

cd libevent-2.1.8-stable

./configure --prefix=/usr/local/libevent/

make && make install

若是没有错误则编译安装成功,安装目的路径为:/usr/local/libevent。


测试libevent是否安装成功:

ls -al /usr/local | grep libevent

3.2编译安装Memcached

运行以下命令对Memcached进行编译安装:

cd /root

tar -xvf memcached-1.5.2.tar.gz

cd memcached-1.5.2

./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/

make && make install

若是没有错误,则编译安装成功,安装目的路径为:/usr/local/memcached,经过以下命令查看:

[root@common ~]# ls -an /usr/local/memcached/

total 0

drwxr-xr-x   5 0 0  45 Oct 21 15:58 .

drwxr-xr-x. 19 0 0 265 Oct 25 16:42 ..

drwxr-xr-x   2 0 0  23 Oct 21 15:58 bin

drwxr-xr-x   3 0 0  23 Oct 21 15:58 include

drwxr-xr-x   3 0 0  17 Oct 21 15:58 share


能够经过执行以下命令来启动Memcached:

/usr/local/memcached/bin/memcached -u root –d 

能够经过执行以下命令来查看Memcached的运行状况:

ps -ef |grep memcached

或者经过查看端口11211的监听状况:

netstat -anp | grep 11211

3.3编译安装Redis

cd /root

tar xzf redis-4.0.2.tar.gz

cd redis-4.0.2

make

make PREFIX=/usr/local/redis install


注意上面的命令中“PREFIX”要大写,一般在一遍编译安装时是小写的,我在安装的时候也用小写,结果没法安装到/usr/local/redis目录,在/usr/local/redis/bin目录下有6个文件,以下:

[root@common ~]# ls -an /usr/local/redis/bin

total 21768

drwxr-xr-x 2 0 0     134 Oct 25 16:42 .

drwxr-xr-x 4 0 0      28 Oct 25 16:44 ..

-rwxr-xr-x 1 0 0 2450872 Oct 25 16:42 redis-benchmark

-rwxr-xr-x 1 0 0 5742384 Oct 25 16:42 redis-check-aof

-rwxr-xr-x 1 0 0 5742384 Oct 25 16:42 redis-check-rdb

-rwxr-xr-x 1 0 0 2605144 Oct 25 16:42 redis-cli

lrwxrwxrwx 1 0 0      12 Oct 25 16:42 redis-sentinel -> redis-server

-rwxr-xr-x 1 0 0 5742384 Oct 25 16:42 redis-server

在上述文件中,其中:

redis-benchmark:性能测试工具,测试Redis在你的系统及配置下的读写性能;

redis-check-aof:用于修复出问题的aof文件;

redis-check-rdb:用于修复出问题的rdb文件;

redis-cli:Redis的命令行操做工具;

redis-sentinel:Redis的集群管理工具;

redis-server:Redis的服务端启动程序


而后执行以下命令将配置文件移动到redis安装目录下

mkdir /usr/local/redis/etc

cp redis.conf /usr/local/redis/etc

由于默认状况下Redis不是在后台运行,须要更改redis.conf中的配置:

vim /usr/local/redis/etc/ redis.conf

将redis.conf中的“daemonize”改成yes。


经过以下命令能够启动Redis:

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

其中“/usr/local/redis/bin/redis-server”是redis监听程序的路径,“/usr/local/redis/etc/redis.conf”是配置文件路径。

启动成功后就能够看到Redis很独特的启动界面,以下:

01_RedisStart.png

 

4.配置

4.1Memcached配置

4.1.1Memcached经常使用参数说明

在前面的安装过程当中简要介绍了一下如何在命令行下运行Memcached,但大部分都是采用了默认设置,实际上Memcached支持更多灵活设置,下面介绍一下Memcached的启动参数。

Memcached经常使用参数说明:

-p:设置端口号(默认为:11211)

-U:UDP监听端口(默认为 11211,为 0 时关闭)

-l:绑定地址(默认:全部都容许,即不管内外网或者本机均可访问,由于Memcached不支持身份验证因此有安全隐患,若设置为127.0.0.1就只能本机访问)

-d:独立进程运行

-u:绑定使用指定用于运行进程<username>

-m:容许最大内存用量,单位M (默认为 64 MB)

-P:将PID写入文件<file>,这样可使得后边进行快速进程终止, 须要与-d 一块儿使用

4.1.2将Memcached配置为service

为了省去每次开机后手动启动Memcached的麻烦,在/usr/lib/systemd/system/下建立memcached.service文件,文件内容以下:

[Unit]

Description=memcached 1.5.2

After=network.target

 

[Service]

#PIDFile=/usr/local/memcached/memcached.pid

Type=forking

ExecStart=/usr/local/memcached/bin/memcached -d -m 256 -u root -p 11211

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

 

[Install]

WantedBy=multi-user.target


而后增长执行权限:

chmod 755 /usr/lib/systemd/system/memcached.service


而后能够执行以下命令来检验是否配置正确:

systemctl enable memcached.service:设置memcached这个service随系统一块儿启动

systemctl disable memcached.service:禁止memcached这个service随系统一块儿启动

systemctl start memcached.service:启动memcached这个service

systemctl stop memcached.service:中止memcached这个service


4.2Redis配置

4.2.1Redis经常使用参数说明

Redis的配置信息存放于redis.conf文件,主要有如下参数:

bind:指定只接受哪些IP的请求,如bind 192.168.1.100 10.0.0.1,默认为bind 127.0.0.1;

port:指定在哪一个端口监听,默认为6379;

pidfile:指定pid文件位置,当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件 

daemonize:指定是否以守护进程方式运行服务,默认是no,大多数状况下须要将其改成yes;

timeout:当客户端闲置多长时间后关闭链接,若是指定为0,表示关闭该功能;

loglevel: 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose

logfile: 日志记录方式,默认为标准输出,若是配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

databases: 设置数据库的数量,默认数据库为0,可使用SELECT <dbid>命令在链接上指定数据库id

save: 指定在多长时间内,有多少次更新操做,就将数据同步到数据文件,能够多个条件配合,格式为:save <seconds> <changes>,例如默认的配置:

save 900 1

save 300 10

save 60 10000

分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改,当知足上述条件之一都会将数据同步到数据文件

rdbcompression:指定存储至本地数据库时是否压缩数据,默认为yes,开启了节约空间但多占用CPU,关闭了节约CPU但占用较大空间,视状况 选择

dbfilename:指定本地数据库文件名,默认值为dump.rdb,知足save参数指定的条件后数据就会同步到这个文件dir:指定本地数据库存放目录

slaveof:设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步,格式为:slaveof <masterip> <masterport>

masterauth:当master服务设置了密码保护时,slav服务链接master的密码

requirepass:设置Redis链接密码,若是配置了链接密码,客户端在链接Redis时须要经过AUTH <password>命令提供密码,默认关闭

maxclients:设置同一时间最大客户端链接数,默认无限制,Redis能够同时打开的客户端链接数为Redis进程能够打开的最大文件描述符数,若是设置 maxclients 0,表示不做限制。当客户端链接数到达限制时,Redis会关闭新的链接并向客户端返回max number of clients reached错误信息

maxmemory:指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将没法再进行写入操做,但仍然能够进行读取操做。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

appendonly:指定是否在每次更新操做后进行日志记录,Redis在默认状况下是异步的把数据写入磁盘,若是不开启,可能会在断电时致使一段时间内的数据丢失。由于 redis自己同步数据文件是按上面save条件来同步的,因此有的数据会在一段时间内只存在于内存中,默认为no

appendfilename:指定更新日志文件名,默认为appendonly.aof

appendfsync:指定更新日志条件,共有3个可选值: no:表示等操做系统进行数据缓存同步到磁盘(快);always:表示每次更新操做后手动调用fsync()将数据写到磁盘(慢,安全);everysec:表示每秒同步一次(折衷,默认值)

4.2.2将Redis配置为service

为了省去每次开机后手动启动Redis的麻烦,在/usr/lib/systemd/system/下建立redis.service文件,文件内容以下:

[Unit]

Description=Redis

After=network.target


[Service]

ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

ExecStop=/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown


[Install]

WantedBy=multi-user.target


而后增长执行权限:

chmod 755 /usr/lib/systemd/system/redis.service


而后能够执行以下命令来检验是否配置正确:

systemctl enable redis.service:设置service随系统一块儿启动

systemctl disable redis.service:禁止service随系统一块儿启动

systemctl start redis.service:启动service

systemctl stop redis.service:中止service

5.检验配置

5.1Memcached状态查看

将memcache.php解压后放到Web服务器目录(固然服务器得配置支持php),在这里为图省事直接将其放置在/usr/local/nginx-1.12.0/html/nosql/目录(有关php与nginx的编译安装,请看本系列的第5篇及第7篇),而后打开/usr/local/nginx-1.12.0/html/nosql/memcache.php页面,里面包含了登陆时的用户名和密码及服务器等配置信息,以下:

define('ADMIN_USERNAME','admin'); // Admin Username

define('ADMIN_PASSWORD','123456');  // Admin Password

define('DATE_FORMAT','Y/m/d H:i:s');

define('GRAPH_SIZE',200);

define('MAX_ITEM_DUMP',50);


$MEMCACHE_SERVERS[] = '127.0.0.1:11211'; // add more as an array


主要修改管理员登陆用户名、密码和Memcached服务器信息便可。修改后将其放入任何一可支持php的web环境下,便可在输入身份验证信息后查看MemCached服务器状态,以下图所示:

02_Memcache.png  

5.2Redis状态查看

将从git版本库获取到的代码上传到/usr/local/nginx-1.12.0/html/nosql/phpRedisAdmin(有关php与nginx的编译安装,请看本系列的第5篇及第7篇,nginx-1.12.0安装在usr/local/nginx-1.12.0),而后启动Redis、Nginx和PHP-FPM,打开http://localhost/nosql/phpRedisAdmin/便可看到以下界面:

03_Redis.png 

能够从管理界面上对key/value管理,也能够点击那个蓝色的感叹号按钮查看Redis服务器信息,以下图所示:

04_Redis_stat.png 

上文提到的另外一个Redis管理工具Redis Desktop Manager比这个要直观一点,不过须要根据操做的本地计算机的操做系统类型不一样而选择不一样版本。

6.总结

本文主要讲述了NoSQL领域的两个比较经常使用的应用Memcached和Redis来介绍其安装和配置过程,并捎带讲述了一下可视化管理界面。其实在NoSQL领域还有其它不错的解决方案,好比mongodb等。另外,时间有限没有讲如何集群化部署了,见过有人使用Memcached做为集群站点的Session服务器,你们有兴趣能够研究一下。


周金桥

2017-10-30


声明:本文首发于本人我的微信订阅号:zhoujinqiaoIT,其后会同时在本人的CSDN、51CTO及oschina三处博客发布,本人会负责在此四处答疑。

相关文章
相关标签/搜索