Redis 快速入门(官网翻译)

原文(http://redis.io/topics/quickstart)

这是一份针对没有接触过Redis的人员的快速入门文档。通过阅读这份文档可以帮助你:

  • 下载和编译Redis
  • 使用redis-cli访问Redis服务器
  • 在你的应用中使用Redis
  • 了解Redis的持久化是如何工作的
  • 更合理地安装Redis
  • 发现下一步去阅读什么能更多地了解Redis

安装Redis

推荐通过编译源码的方式来安装Redis,因为Redis除了依赖GCC编译器和libc之外,没有任何依赖。通过使用你的linux的包管理器来安装Redis是有些不推荐的,因为通常这样安装的可用版本不是最新的。你可以从redis.io下载最新的Reids源码包或者另外使用一个总是指向最新稳定的Redis版本的网址,这个网址是http://download.redis.io/redis-stable.tar.gz.
按照下面的步骤编译Redis:

 wget http://download.redis.io/redis-stable.tar.gz
 tar xvzf redis-stable.tar.gz
 cd redis-stable
 make

在这时候,如果你的构建过程没有问题,你可以尝试输入make test,但是这是可选。编译完成后,Redis内的src目录会生成几个不同的可执行文件,它们是redis的组成部分:

  • redis-server这是Redis服务器
  • redis-sentinel是Redis的监控程序(监控和故障转移).
  • redis-cliRedis的命令行客户端
  • redis-benchmark用于测试Redis的性能
  • redis-check-aofredis-check-dump在特殊情况下数据文件损坏的时候很有用

复制Redis服务器和命令行工具到合适的位置是个好主意,手动使用下面的命令:

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

或者直接执行

sudo make install

在下面的文档中我们假设/usr/local/bin在你的PATH环境变量中,这样就不需要输入全路径就可以执行所有的二进制文件:

$ 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命令的第一个参数,像下面的例子一样:

redis-server /etc/redis.conf

你应该使用Redis源码根目录下的redis.conf作为你的配置文件模板去书写你的配置文件。

检查Redis是否在运行

外部程序与Redis进行交互通过TCP套接字和Redis的特殊协议。这个协议被不同编程语言的Redis客户端程序所实现。当然为了让使用Redis更简单,Redis提供了一个命令行工具,可以使用这个工具发送命令给Redis。这个程序的名称是redis-cli。为了检查Redis是否正常运行,第一件事情是使用redis-cli发送PING命令:

$ redis-cli ping
PONG

运行redis-cli后面跟着一个命令的名称和命令的参数将会将该命令传送给运行在localhost且端口号为6379的Redis实例上。你可以通过redis-cli改变IP和端口,试试使用 --help 选项查看更多的使用信息。
另外一种有趣的运行redis-cli的方式是不使用参数:这个程序会启动交互模式,你可以输入不同的命令,查看他们的回复。

$ 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进行交互了。为了学习一些Redis命令,这时候最好暂停阅读这个教程,开始学习fifteen minutes introduction to Redis data types。当然如果你已经知道一些Redis的基础命令,你可以继续阅读。

Redis安全

一般情况下,Redis可以与所有接口绑定,但是都不会做验证。如果你在受控制的环境中,与外部网络和通常的攻击者分离,使用Redis是好的。然而如果Redis没有任何强化暴露在互联网下,这是一个大的安全问题。如果你不是百分百确认你的环境是安全的,为了让Redis更安全,请按下面可以增强安全性的步骤检查:

  1. 确保Redis用来监听连接的端口(默认6379、Redis运行在集群模式的默认端口16379、监控默认端口26379)是被防火墙禁止的,这样就不可能通过外部网络访问Redis。
  2. 为了保证Reids只监听你所使用小部分网络,可以使用一个有设置bind指令的配置文件。比如如果你访问Redis只是在局部的同一台计算机上,你可以只配置环回接口(127.0.0.1),等等。
  3. 为了增加一个附加的安全层,使用requirepass选项,这样客户端就需要使用AUTH命令进行验证。
  4. 如果你的环境要求加密的话,为了加密Redis服务器与客户端之间的流量,可以使用spiped或者其他 SSL隧道软件。

注意:
Redis在没有任何安全措施的情况下暴露在互联网中是非常容易被利用的,所以确保你理解上面的内容,并且使用至少一个防火墙层。防火墙设置好后,为了保证Redis服务器不可访问,尝试在其他的主机上使用redis-cli连接Redis。

在你的应用中使用Redis

当然通过命令行界面使用Redis是不够的,因为你的目标是在你的应用中使用它。为了实现这个,你需要为你的编程语言下载和安装一个Redis的客户端。你将在这个页面中看到所有的针对不同编程语言的客户端。
比如你刚好使用的是Ruby,我们的建议是你最好使用Redis-rb客户端。你可以使用gem install redis安装它(同时也确保安装了SystemTimer
这些命令是针对Ruby的,但事实上很多流行语言的客户端都是相似的:你创建Redis对象和执行命令的调用方法。一个简短的使用Ruby的交互例子:

>> 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持久化

你可以在这个页面中学习Redis持久化是如何工作的,当然对于一个入门教程来说,最重要的是理解,默认情况下,如果你没有使用配置文件启动Redis,Redis将会不定时地自动保存数据(比如如果你在你的数据中有100次变更至少要5分钟后),所以如果你想持久化你的数据库并且重启的时候可以重新载入数据,那么你在想强制保存数据快照的时候,确保手动调用SAVE命令。或者关闭数据库使用SHUTDOWN命令:

$ redis-cli shutdown

这种方式,Redis将会保证在退出前保存数据到磁盘中。为了更好地理解Redis的持久化是如何工作的,强烈建议你阅读persistence page

更合理地安装Redis

仅仅在玩一下或者开发的情况下,在命令行中执行Redis是好的。然而在某些时候你将有一些真实的应用运作在正式的服务器上。对于这种使用,你有2个不同的选择:

  • 使用屏幕运行Redis
  • 使用一个初始化脚本用合适的方式安装Redis在你的Linux服务器上,这样子在重启所有的东西的时候,Redis将会重新启动。

使用一个初始化脚本进行安装是强烈推荐的。下面的命令演示了一次在Debian或者 Ubuntu上,合理使用初始化脚本安装Redis 2.4的过程。
我们假设你已经复制redis-serverredis-cli可执行文件到/usr/local/bin下。

  • 创建用来存储你的Redis配置文件和你的数据的目录:
sudo mkdir /etc/redis
sudo mkdir /var/redis

复制初始化脚本到/etc/init.d内,你可以在Redis安装目录下的utils目录找到这个初始化脚本。我们建议你使用带有你要运行的Redis实例的端口号的名字来调用它,比如:

sudo cp utils/redis_init_script /etc/init.d/redis_6379

编辑这个脚本。

sudo vi /etc/init.d/redis_6379

确保根据你使用的端口号更改REDISPORT。pid文件路径和配置文件名称都依赖于这个端口号。

  • 复制在Redis根目录下找到的配置文件模板到/etc/redis/ 内,并将名字重命名为你所使用的端口号,比如:
sudo cp redis.conf /etc/redis/6379.conf
  • 在/var/redis内创建目录,这个目录作为Redis的数据和工作目录,比如:
sudo mkdir /var/redis/6379
  • 编辑配置文件,确保执行下面的变更:
    • 设置daemonize为 yes (默认设置为no).
    • 设置pidfile为/var/run/redis_6379.pid
      (如果需要的话可以变更端口).
    • 改变port。在我们的例子中是不需要的,因为默认端口已经是6379。
    • 设置更合适的日志级别:loglevel.
    • 设置日志文件为/var/log/redis_6379.log:logfile
    • 设置dir为/var/redis/6379 (非常重要的一步!)
  • 最好使用下面的命令将新的Redis初始化脚本加入到所有默认的运行级别中:
sudo update-rc.d redis_6379 defaults

你已经完成了。现在你可以试试运行你的Redis:

sudo /etc/init.d/redis_6379 start

确保所有事情正如你所期望的那样执行:

  • 使用redis-cli,ping你的Redis实例
  • 使用redis-cli save做一次存储测试,然后检查转储文件是否正确地存储在/var/redis/6379/内(你应该找到一个叫dump.rdb的文件)
  • 检查Redis实例正确地将日志记录在日志文件中。
  • 如果这是一个你可以随意操作的新机器,确保重启后Redis还是能正常运行

注意: 在上面的指令中我们跳过了很多你可能想去修改的配置参数,比如配置使用AOF方式的持久化而不是RDB方式的持久化、安装一个复制,等等。阅读redis.conf这个配置文件示例和其他的你可以在这个站点找到的文档去获取更多的信息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容