Redis是一套内存内键-值存储方案,向来以出色的灵活性、性能与广泛的语言支持能力而著称。今天,我们将共同了解如何在Ubuntu 16.04服务器上安装并配置Redis。
要完成本教程,大家首先需要接入一套Ubuntu 16.04服务器。另外,还需要一个非root用户并以sudo权限执行各项命令。关于这部分内容,请参阅Ubuntu 16.04 初始服务器设置指南一文。
准备就绪后,利用sudo用户登入Ubuntu 16.04服务器。
为了获取Redis的最新版本,我们需要从来源编译并安装该软件。在代码下载完成后,我们需要满足build关联性以编译该软件。
首先从Ubuntu库安装build-essential meta-package。另外还需要下载tcl软件包以用于二进制代码测试。
我们可以通过以下命令更新本地apt软件包缓存并安装关联性:
- sudo apt-get update - sudo apt-get install build-essential tcl
接下来对Redis进行build。
由于我们不需要长期保留源代码,因此可以直接在/tmp目录内进行build:
- cd /tmp
现在下载Redis最新版本,大家可以使用稳定下载URL:
- curl -O http://download.redis.io/redis-stable.tar.gz
解压tar:
- tar xzvf redis-stable.tar.gz
前往Redis源目录:
- cd redis-stable
现在对Redis二进制代码进行编译:
- make
编译完成后,运行测试套件以确保built正确:
- make test
这一过程通常需要几分钟。完成后,大家可以使用以下命令进行安装:
- sudo make install
Redis已经安装完成,接下来进行配置。首先创建一个配置目录,这里我们使用/etc/redis目录:
- sudo mkdir /etc/redis
将Redis源归档文件内的示例Redis配置文件复制进来:
- sudo cp /tmp/redis-stable/redis.conf /etc/redis
而后打开文件并进行调整:
- sudo nano /etc/redis/redis.conf
在文件中找到supervised命令。现在其被设置为no。由于我们运行的操作系统使用systemd init系统,因此需要将其变更为systemd:
/etc/redis/redis.conf . . . # If you run Redis from upstart or systemd, Redis can interact with your # supervision tree. Options: # supervised no - no supervision interaction # supervised upstart - signal upstart by putting Redis into SIGSTOP mode # supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET # supervised auto - detect upstart or systemd method based on # UPSTART_JOB or NOTIFY_SOCKET environment variables # Note: these supervision methods only signal "process is ready." # They do not enable continuous liveness pings back to your supervisor. supervised systemd . . .
下面找到dir目录。此选项指定Redis用于放置持久数据的目录。我们需要挑选合适的位置,并确保Redis有权限写入但普通用户无权查看。
这里我们使用/var/lib/redis目录,稍后进行创建:
/etc/redis/redis.conf . . . # The working directory. # # The DB will be written inside this directory, with the filename specified # above using the 'dbfilename' configuration directive. # # The Append Only File will also be created inside this directory. # # Note that you must specify a directory here, not a file name. dir /var/lib/redis . . .
完成后保存并退出。
接下来,我们可以创建一个systemd unit文件,从而利用该init系统管理Redis进程。
首先创建并打开/etc/systemd/system/redis.service文件:
- sudo nano /etc/systemd/system/redis.service
在这里,我们在[Unit]部分处添加一条描述,定义要求网络在服务启动前必须处于可用状态:
/etc/systemd/system/redis.service [Unit] Description=Redis In-Memory Data Store After=network.target
在[Service]部分,我们需要指定该服务的运作方式。出于安全考虑,我们不应以root方式运行服务。我们应当使用专用用户及群组,并以此调用redis。我们稍后再创建这部分内容。
要启动服务,我们只需要在配置中调用redis-server二进制文件。要将其关闭,则可使用Reids的shutdown命令,其可利用redis-cli加以执行。另外,由于我们希望Redis能够在故障情况下得到恢复,因此需要将Restart指令设定为“always”:
/etc/systemd/system/redis.service [Unit] Description=Redis In-Memory Data Store After=network.target [Service]User=redisGroup=redisExecStart=/usr/local/bin/redis-server /etc/redis/redis.confExecStop=/usr/local/bin/redis-cli shutdownRestart=always
最后在[Install]部分,我们将systemd定义为在该服务可用时始终关联(即在引导过程中即行启动):
/etc/systemd/system/redis.service [Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf ExecStop=/usr/local/bin/redis-cli shutdown Restart=always [Install]WantedBy=multi-user.target
完成后保存并退出。
现在我们创建前两个文件所引用的用户、群组与目录。
首先创建reids user与group,命令如下:
- sudo adduser --system --group --no-create-home redis
现在创建/var/lib/redis目录:
- sudo mkdir /var/lib/redis
为redis user与group分配此目录的所有权:
- sudo chown redis:redis /var/lib/redis
调整权限以确保普通用户无法访问该位置:
- sudo chmod 770 /var/lib/redis
现在,我们可以启动Redis服务器了。
下面启动此systemd服务:
- sudo systemctl start redis
检查服务中是否存在错误:
- sudo systemctl status redis
结果应如下所示:
Output ● redis.service - Redis Server Loaded: loaded (/etc/systemd/system/redis.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2016-05-11 14:38:08 EDT; 1min 43s ago Process: 3115 ExecStop=/usr/local/bin/redis-cli shutdown (code=exited, status=0/SUCCESS) Main PID: 3124 (redis-server) Tasks: 3 (limit: 512) Memory: 864.0K CPU: 179ms CGroup: /system.slice/redis.service └─3124 /usr/local/bin/redis-server 127.0.0.1:6379 . . .
要测试服务是否正常起效,首先使用以下命令接入Redis服务器:
- redis-cli
在提示符中测试连接情况:
- ping
输出结果如下:
Output PONG
大家可以设置需要的返回结果:
- set test "It's working!" Output OK
现在再次检查:
- get test
取得的则为预存值:
Output "It's working!"
退出Redis提示符并返回shell:
- exit
作为最后一步测试,我们重启Redis实例:
- sudo systemctl restart redis
现在再次接入客户端并确认测试值仍然可用:
- redis-cli - get test
返回的值应该仍然为:
Output "It's working!"
完成后再次返回shell:
- exit
如果测试圆满成功,接下来要做的是确保Redis在引导过程中自动启用。
具体命令如下:
- sudo systemctl enable redis Output Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.