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