前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
关于 Redis
Redis,于2009年开发,是一个灵活的、开源的、键值数据存储。在其他NoSQL数据库(如Cassandra、CouchDB和MongoDB)的基础上,Redis允许用户存储大量数据,而不受关系数据库的限制。此外,它还被比作memcache,并且可以使用其基本元素作为带持久性的缓存。
设置
在安装Redis之前,需要下载一些先决条件,以尽可能简化安装过程。
首先更新所有apt-get软件包:
sudo apt-get update
一旦进程完成,下载一个带有构建基本要素的编译器,这将帮助我们从源代码安装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 test:
make test
最后运行make install,将程序安装到系统范围内。
sudo make install
安装程序后,Redis附带一个内置脚本,用于设置Redis作为后台守护程序运行。
要访问该脚本,请进入utils目录:
cd utils
然后,运行Ubuntu/Debian安装脚本:
sudo ./install_server.sh
当脚本运行时,您可以通过按Enter键选择默认选项。脚本完成后,redis-server将在后台运行。
您可以使用以下命令启动和停止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服务器允许从任何地方进行连接,这是不安全的。将绑定到localhost将限制对服务器本身的访问,这是保护服务器的良好第一步。
打开Redis配置文件进行编辑:
sudo nano /etc/redis/6379.conf
找到此行并确保它已取消注释(如果存在#
,请删除):
bind 127.0.0.1
这只是保护Redis实例的第一步。有关如何保护服务器的更多信息,请参阅文章如何在Ubuntu 14.04上保护您的Redis安装。
Redis操作
向字符串(最基本的Redis数据类型)添加信息的简单命令可能如下所示:
> SET users:GeorgeWashington "job: President, born:1732, dislikes: cherry trees"
OK
在这种情况下,命令SET后面跟着键(users:GeorgeWashington),然后是值(字符串本身)。
Redis中的冒号对其操作没有影响。但是,它们可以用于描述要填充的键。
我们可以使用“GET”命令检索新字符串的详细信息:
GET users:GeorgeWashington
"job: President, born:1732, dislikes: cherry trees"
范围:
在检索数据时,您可以使用两个参数定义范围:第一个和最后一个元素(第一个元素被视为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在存储信息方面非常有帮助,但它也可以用于系统地过期数据。
可以使用EXPIRE命令指定键应存在的时间长度,可以使用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命令随机提取元素。
有序集合
有序集合有一个直观的名称:它是与数字关联的字符串集合,并且默认按从小到大的顺序排列。
这种数据类型与范围配合得很好,因为它们从一开始就是有序的,因此可以快速地添加、删除或更新值。
有序集合的一些常见命令包括:
- 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中的哈希是表示具有许多字段的对象的有用工具。它们设置为在小空间中存储大量字段。哈希可以存储超过40亿个字段-值对。
一些常见的哈希命令包括:
- 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可以与大多数编程语言一起使用。