如何安装和使用Redis

本教程涵盖Redis安装,一些简单的Redis操作和5种Redis数据类型。 Redis于2009年开发,是一个灵活的开源的关键值数据存储,允许用户存储大量的数据而不受限制

关于Redis

Redis在2009年开发,是一个灵活的,开源的关键价值数据存储。 在其他NoSQL数据库(如Cassandra,CouchDB和MongoDB)的脚步中,Redis允许用户存储大量数据,而不受关系数据库的限制。 此外,它也被与memcache进行比较,并且可以使用它的基本元素作为具有持久性的缓存。

注:Redis的可以自动在你的Droplet通过添加安装这个脚本启动时,它的用户数据。 查看本教程以了解更多有关Droplet的用户数据。

建立

在安装redis之前,需要下载几个先决条件,以使安装尽可能简单。

首先更新所有apt-get软件包:

sudo apt-get update

一旦该过程完成,下载一个编译器与build essential,这将有助于我们从源代码安装Redis:

 sudo apt-get install build-essential

最后,我们需要下载tcl:

 sudo apt-get install tcl8.5

安装Redis

将所有先决条件和依赖项下载到服务器后,我们可以继续并从源代码开始安装redis:

从Redis.io下载最新的稳定版本tarball。

wget http://download.redis.io/releases/redis-stable.tar.gz

解开它并切换到该目录:

tar xzf redis-stable.tar.gz
cd redis-stable

使用make命令继续:

make

运行推荐的make测试:

make test

通过运行make install完成,这将安装整个系统的程序。

sudo make install

一旦程序安装完成,Redis就会提供一个内置脚本,用于设置Redis作为后台守护进程运行。

要访问脚本,请转到utils目录:

cd utils

从那里,运行Ubuntu / Debian安装脚本:

sudo ./install_server.sh

在脚本运行时,可以通过按Enter键选择默认选项。 一旦脚本完成,redis服务器将在后台运行。

您可以使用这些命令启动和停止redis(数字取决于您在安装期间设置的端口,6379是默认端口设置):

sudo service redis_6379 start
sudo service redis_6379 stop

然后,您可以通过键入以下命令来访问redis数据库:

redis-cli

您现在已经安装并运行Redis。 提示符如下所示:

redis 127.0.0.1:6379> 

要将Redis设置为在引导时自动启动,请运行:

sudo update-rc.d redis_6379 defaults

保护Redis

默认情况下,Redis服务器允许来自不安全的任何地方的连接。 绑定到本地主机将限制对服务器本身的访问,这是保护您的服务器的良好的第一步。

打开Redis配置文件进行编辑:

sudo nano /etc/redis/6379.conf

找到这一行,并确保它是取消注释(删除##如果存在):

bind 127.0.0.1

这只是保护您的Redis实例的第一步。 有关如何保护您的服务器的详细信息,请参阅文章如何保护您的Redis安装在Ubuntu 14.04

Redis操作

将信息添加到字符串(最基本的redis数据类型)的简单命令可能如下所示:

> SET users:GeorgeWashington "job: President, born:1732, dislikes: cherry trees"
OK

在这种情况下,命令SET后面是键(用户:GeorgeWashington),然后值(字符串本身)

Redis的冒号对它的操作没有影响。 然而,它们可以用于描述要填充的密钥。

我们可以使用命令“GET”检索新字符串的详细信息

GET users:GeorgeWashington
"job: President, born:1732, dislikes: cherry trees"
范围:

检索数据时,可以使用2个参数定义范围:第一个和最后一个元素(第一个元素被视为0)。 如果您的结束参数为-1,则将包括列表末尾的所有元素。 例如,如果列表包含彩虹的6种颜色(与经典的ROYGBV排列),您将能够看到以下结果:

> LRANGE ROYGBV 0 3
1) "red"
2) "orange"
3) "yellow"
4) "green"
> LRANGE ROYGBV 0 -1
1) "red"
2) "orange"
3) "yellow"
4) "green"
5) "blue"
6) "violet"
> LRANGE ROYGBV 3 -1
1) "green"
2) "blue"
3) "violet"
到期日:

虽然Redis在存储信息方面非常有用,但它也可用于系统性地过期数据。

键应存在的时间可以以秒或用Unix时间戳(从1970年1月1日起的秒数)来指定。 可以控制到期的两个有用的命令是EXPIRE,它设置密钥应存在的时间长度,以及TTL,它显示密钥过期之前的剩余时间。

> SET classified:information "Secret Stuff"
OK
> EXPIRE classified:information 45
(integer) 1
> TTL classified:information
(integer) 31

尝试在信息过期后检索信息会导致“nil”

> GET classified:information
(nil)
增量:

Redis还能够在原子操作中增加其数据库中的字符串。 如果一个进程正在增加一个值,没有其他命令可以同时进行,并且数字在整个数据库中保持一致。

> SET population 6
OK
> INCRBY population 10
(integer) 16
> INCR population
(integer) 17
交易:

Redis还具有执行事务的能力,它必须遵守两个原则:1)命令必须按顺序执行。 它们不会在其他请求的过程中中断。 2)交易必须全部处理。

事务使用命令MULTI开始,随后使用命令EXEC运行。

如果由于某种原因,有一个服务器的问题,扰乱过程中,交易将退出,并Redis的将经历一个错误重新启动,直到命令阻止它, edis-check-aof运行和部分交易被撤消和删除。

之后,服务器将能够重新启动。

> MULTI
OK
> SET population 6
QUEUED
> INCRBY population 10
QUEUED
> INCR population
QUEUED
redis 127.0.0.1:6379> EXEC
1) OK
2) (integer) 16
3) (integer) 1
4) (integer) 17

Redis数据类型

Redis有五种数据类型:字符串,集合,排序集,列表,哈希

字符串是Redis最基本的数据类型。

与字符串相关联的一些常见命令是:

SET:将值设置为键

GET:从键获取值

DEL:删除一个键及其值

INCR:以原子方式递增键

INCRBY:以指定的值递增键

EXPIRE:键应存在的时间长度(以秒为单位表示)

字符串可用于存储对象,按键排列。

例如:

> SET newkey "the redis string begins"
OK
> GET newkey
"the redis string begins"

集合

如果你想组合字符串,你可以使用REDIS集合,一个无序的字符串集合。

集合的一些常用命令是:

SADD:将一个或成员添加到集合

SMEMBERS:获取所有集合成员

SINTER:查找多个集合的交集

SISMEMBER:检查值是否在集合中

SRANDMEMBER:获取随机集成员

集合在各种情况下都有帮助。 因为集合的每个成员都是唯一的,所以向集合添加成员不需要“检查然后添加”操作。 相反,每当执行SADD命令时,集合将检查项目是否重复。

> SADD colors red
(integer) 1
redis 127.0.0.1:6379> SADD colors orange
(integer) 1
redis 127.0.0.1:6379> SADD colors yellow
(integer) 1
redis 127.0.0.1:6379> SADD colors orange
(integer) 0
redis 127.0.0.1:6379> SMEMBERS colors
1) "red"
2) "yellow"
3) "orange"

集合可能特别有用,例如,在检查访问页面的唯一IP地址或使用SRANDMEMBER命令随机提取元素。

排序集

排序集具有直观的名称:它们是与数字相关联的字符串的集合,并且默认按照从最小到最大的顺序排列。

此数据类型适用于范围,并且,因为它们从开始排序,可以快速完成添加,删除或更新值。

对于Sorted Sets的一些常见命令是:

ZADD:将成员添加到排序集

ZRANGE:显示按索引排序的排序集的成员(默认为从低到高)

ZREVRANGE:显示按索引排列的排序集的成员(从高到低)

ZREM:从排序集中删除成员

我们可以创建一个样本排序集,其大小(以平方英里为单位)是世界上最小的国家。

> zadd countries 9 Tuvalu
(integer) 1
> zadd countries 62 Liechtenstein
(integer) 1
> zadd countries .7 Monaco
(integer) 1
> zadd countries .2 VaticanCity
(integer) 1
> zadd countries 107 Seychelles
(integer) 1
redis 127.0.0.1:6379> zrange countries 0 -1
1) "VaticanCity"
2) "Monaco"
3) "Tuvalu"
4) "Liechtenstein"
5) "Seychelles"

列表

Redis中的列表是有序值的集合。 这与无序的集相反。 你可以添加元素到列表的开始或结束(即使当列表中有超过一千万个元素)以极大的速度。

与列表相关联的一些常见命令是:

LPUSH:向列表的开始添加一个值

RPUSH:在列表的末尾添加一个值

LPOP:获取和删除列表中的第一个元素

RPOP:获取和删除列表中的最后一个元素

LREM:从列表中删除元素

LRANGE:从列表中获取一系列元素

LTRIM:修改列表,因此只保留指定的范围

我们可以创建一个分配给每周带午饭的人的列表:

> rpush lunch.provider alice
(integer) 1
> rpush lunch.provider bob
(integer) 2
> rpush lunch.provider carol
(integer) 3
> rpush lunch.provider don
(integer) 4
> rpush lunch.provider emily
(integer) 5

如果我们想把某人推送到队列的前面,我们可以使用LPUSH命令:

lpush lunch.provider zoe
(integer) 6
然后,LRANGE命令将显示我们的整个列表:
 lrange lunch.provider 0 -1
1) "zoe"
2) "alice"
3) "bob"
4) "carol"
5) "don"
6) "emily"

列表通常可用于创建事件的时间轴或维护有限数量的元素的集合。

哈希

Redis中的哈希是一个有用的工具,用于表示具有许多字段的对象。 它们被设置为在少量空间中存储大量的字段。 散列可以存储超过4亿个字段值对。

一些常见的哈希命令是:

HMSET:设置多个哈希值

HSET:使用字符串值设置散列字段

HGET:检索哈希字段的值

HMGET:检索给定哈希字段的所有值

HGETALL:检索哈希中的所有值

我们可以使用哈希来描述示例网站用户。

> hmset user:1 username jsmith password 4bAc0s email jsmith@gmail.com
OK
> hgetall user:1
1) "username"
2) "jsmith"
3) "password"
4) "4bAc0s"
5) "email"
6) "jsmith@gmail.com"

如果需要查找特定信息,HMGET仅显示请求字段的值。

> hmget user:1 username email
1) "jsmith"
"jsmith@gmail.com"

结论

自从它发布以来,Redis很快就获得了很多人的欢迎,并且被github,flickr,Disqus和Craigslist等人利用。 此外,Redis可以用于大多数编程语言。

这只是一些概述一些redis的基本功能。 我们将很乐意回答我们的具体问题Q&A论坛

作者Etel Sverdlov