Redis Quick Start

概述

  这是一篇给没有使用过Redis的用户的快速开始文档。阅读这篇文档给你以下的帮助:

  • 通过下载和编译Redis去启动服务。
  • 使用redis-cli去访问服务。
  • 通过你的应用程序来使用Redis。
  • 理解Redis是怎样持久化工作的。
  • 更好的去安装Redis。
  • 通过阅读其他资料进一步了解Redis。

安装Redis

推荐通过源码编译安装Redis,只需要GCC compiler and libc就可以工作,不需要其他的依赖。通过包管理器安装的Redis不是最新的版本。
你可以通过redis.io站点去下载最后的Redis版本,或者通过http://download.redis.io/redis-stable.tar.gz下载最新的稳定版本。
按照下面简单的步骤编译redis:

1
2
3
4
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make

你可以通过输入make test来构建测试,这是一个可选的步骤。编译后的src目录会出现不同的可执行文件:

  • redis-server 服务本身.
  • redis-sentinel 高可用工具 (监控和故障转移).
  • redis-cli 命令行工具来连接Redis。
  • redis-benchmark 用来检查Redis性能的工具。
  • redis-check-aof and redis-check-dump 修复数据文件的工具。

复制Redis服务和命令行工具到适当的地方,手动执行以下命令:

1
2
sudo cp src/redis-server /usr/local/bin/
sudo cp src/redis-cli /usr/local/bin/

或者使用 sudo make install.

启动Redis

下面的流程我们假设/usr/local/bin在你的PATH环境变量里,所以你在执行这些命令的时候不需要指定完整的路径。

启动Redis服务最简单的方式就是不带任何参数运行redis-server。

1
2
3
4
5
$ redis-server
[28550] 01 Aug 19:29:28 # Warning: no config file specified, using the default config. In order to specify a config file use 'redis-server /path/to/redis.conf'
[28550] 01 Aug 19:29:28 * Server started, Redis version 2.2.12
[28550] 01 Aug 19:29:28 * The server is now ready to accept connections on port 6379
... more logs ...

上面的例子里面Redis没有带任何配置文件启动,所有的参数都将使用默认值。如果你启动Redis仅仅只是玩一玩或者作为开发使用,这样就已经可以了,但如果是生产环境的话你应该制定一个配置文件。

在启动Redis的时候使用完整路径携带一个配置文件并且作为第一个参数,像这样:redis-server /etc/redis.conf。你应该使用源码根目录下面的redis.conf作为一个模板来修改你的配置文件。

检查Redis是否在工作

外部程序与Redis交互使用的是TCP socket和一个具体的协议。这个协议根据不同的程序语言来实现。我们使用Redis提供的一个命令行工具来发送命令给Redis,这个工具叫Redis-cli。第一件事情就是发送一个PING命令来检查Redis是否在工作:

1
2
$ redis-cli ping
PONG

运行redis-cli命令将连接本地的6379端口并发送命令名称给服务器。你可以改变主机和端口,只需要输入–help选项就可以获取使用信息。

另一个有趣的方式是运行一个不带参数的redis-cli:这个程序将开启交互模式,你可以键入不同的命令来查看结果。

1
2
3
4
5
6
7
$ redis-cli                                                                
redis 127.0.0.1:6379> ping
PONG
redis 127.0.0.1:6379> set mykey somevalue
OK
redis 127.0.0.1:6379> get mykey
"somevalue"

这样你就可以和Redis交互了。你可以花上15分钟时间来学习Redis的数据类型,如果你已经知道了这些命令的使用可以跳过阅读。

保护Redis

默认情况下Redis绑定所有的接口并且不需要认证。如果你的Redis是在一个可以控制的环境里面,受外界的攻击,这样就很好。但是如果Redis暴露在了互联网的话,这就是一个很大的安全问题。如果你不能够百分之百的确保你的环境被妥善的处理,请通过以下步骤检查安全性。

  1. 确保Redis连接端口(默认是6379,如果你运行Redis是在集群模式下使用的是16379,Sentinel模式是26379)是在防火墙后面,所以外网是不能够连接进来的。
  2. 修改配置文件里面的bind指令,只设置成你使用的网络接口,比如设置成回环接口(127.0.0.1)就只能允许同一台机子访问Redis,等等。
  3. 使用requirepass选项添加一层额外的安全保护,客户端就必须通过AUTH命令来认证。
  4. 如果你的环境必须要加密处理的话,就使用spiped或者其他的SSL软件来加密服务器和客户端之间的传输。

Redis在没有任何安全保护的情况下暴露在外网是很容易做到的,所以你要确保至少有一个保护层,可以尝试在防火墙中和外部通过redis-cli去连接服务来证明你的安全性。

在你的应用程序里面使用Redis

通过使用Redis的命令行工具还不够,我们想通过程序来交互,你需要下载你的程序语言对应的客户端库,你可以在这里找到不同语言对应的客户端库信息。

如果你恰好使用的是Ruby语言开发的程序,我们建议使用Redis-rb client。你可以使用命令gem install redis去安装redis。

这些指令是在Ruby环境下的,但其他语言的库看起来都差不多:创建一个Redis对象并且执行命令,一个简单的Ruby例子:

1
2
3
4
5
6
7
8
9
10
11
12
>> require 'rubygems'
=> false
>> require 'redis'
=> true
>> r = Redis.new
=> #<Redis client v2.2.1 connected to redis://127.0.0.1:6379/0 (Redis v2.3.8)>
>> r.ping
=> "PONG"
>> r.set('foo','bar')
=> "OK"
>> r.get('foo')
=> "bar"

Redis持久化

你可以学习 how Redis persistence works on this page, 然而我们要理解默认启动, 如果你使用的是默认配置启动的Redis,Redis 会自动的保存数据集(例如5分钟后,或者至少有100次的修改),如果你想你的数据库持久化并且在重启后重新加载数据, 就需要手动调用SAVE命令强制设置一个数据快照,否则请使用SHUTDOWN命令来关掉数据库:

1
$ redis-cli shutdown

这种方式Redis将在退出之前将数据保存到磁盘。强烈建议阅读持久化工作

更好的安装Redis

通过命令行运行Redis仅仅是在开发环境。然而,你的实际程序是运行在一个真实的服务器上。你有两种不同的选择:

  • 使用screen运行Redis。
  • 使用初始化脚本来启动Redis,在重启后会重新开始。

建议使用初始化脚本来安装,我们假设已经复制了redis-server和redis-cli到/usr/local/bin目录下面。

  • 创建一个目录来存储你的Redis配置和你的数据:
1
2
sudo mkdir /etc/redis
sudo mkdir /var/redis
  • 在utils目录下面找到初始化脚本复制到/etc/init.d目录中,例如:
1
sudo cp utils/redis_init_script /etc/init.d/redis_6379
  • 编辑初始化脚本。
1
sudo vi /etc/init.d/redis_6379

确保修改的redis端口关联到你使用的端口。pid文件和配置文件都依赖这个端口。

  • 在你的根目录下面复制模板配置文件到/etc/redis下面,使用端口命名文件:
1
sudo cp redis.conf /etc/redis/6379.conf
  • 在/var/redis/里面创建一个目录作为数据和工作的目录:
1
sudo mkdir /var/redis/6379
  • 编辑配置文件,确保执行了以下更改:

  • 设置daemonize为yes(默认是no)

  • 设置pidfile路径为/var/run/redis_6379.pid(修改端口时需要设置)

  • 修改端口,在我们的例子里面使用的是默认端口6379.

  • 设置你的日志级别loglevel。

  • 设置logfile路径为/var/log/redis_6379.log

  • 设置dir数据目录为 /var/redis/6379 (非常重要的一步!)

  • 最后修改初始化脚本文件的运行级别,ubuntu执行以下命令:

1
sudo update-rc.d redis_6379 defaults
centos执行以下命令,文件开头添加chkconfig:
1
2
3
vim /etc/init.d/redis_6379
# chkconfig: 2345 90 10
chkconfig redis_6379 on

你可以尝试运行你的实例:

1
sudo /etc/init.d/redis_6379 start

确保按照预期的执行:

  • 尝试使用redis-cli去ping你的实例。
  • 使用redis-cli save命令测试保存并且检查dump文件是否保存到了/var/redis/6379(你应该会找到一个dump.rdb文件)。
  • 检查你的redis实例是否正确的记录了日志。
  • 如果它是一台新的机器,你可以在没有问题的情况下尝试它,确保重启后一切仍在工作。

注意:我们在这个例子里面跳过了很多配置参数,务必阅读例子中的redis.conf文件,你也可以在这个网站的其他文档上找到更多的信息。