Redis 简介

Redis 是一个主要由 Salvatore Sanfilippo (antirez)开发的开源的内存数据结构存储器, 它经常被用作数据库、缓存以及消息代理等用途。

Redis 因为它丰富的数据结构、极快的速度、齐全的功能而为人所知, 它是目前内存数据库方面的事实标准, 在互联网上有非常广泛的应用, 包括微博、Twitter、GitHub、Stack Overflow、知乎等国内外公司都大量地使用了 Redis 。

虽然 Redis 拥有各式各样的特点和优点, 但其中最重要的不外乎以下这些:

丰富多样的数据结构:Redis 为用户提供了字符串、散列、列表、集合、有序集合、HyperLogLog、位图、流、地理坐标等一系列丰富的数据结构, 每种数据结构都适用于解决特定的问题。 在有需要的时候, 用户还可以通过事务、Lua 脚本、模块等特性, 扩展已有数据结构的功能, 甚至从零实现自己专属的数据结构。 通过这些数据结构和特性, Redis 可以保证, 用户总是可以使用最适合的工具去解决手头上的问题。

完备的功能:在上述这些数据结构的基础上, Redis 提供了很多非常有用和实用的附加功能, 比如自动过期、流水线、事务、数据持久化等, 这些功能能够帮助用户将 Redis 应用在更多不同的场景中, 或者给予用户以方便。 更重要的是, Redis 不仅可以单机使用, 还可以多机使用: 通过 Redis 自带的复制、Sentinel 和集群功能, 用户可以将自己的数据库扩展至任意大小。 无论你运营的是一个小型的个人网站, 还是一个为上千万消费者服务的热门站点, 你都可以在 Redis 找到你想要的功能, 并将其部署到你的服务器里面。

风驰电掣般的执行速度:Redis 是一款内存数据库, 它将所有数据都储存在内存里面。 因为计算机访问内存的速度要远远高于访问硬盘的速度, 因此与基于硬盘设计的传统数据库相比, Redis 在数据的存取速度方面具有天然的优势。 虽然说“背靠大树好乘凉”, 但 Redis 并没有因为自己拥有天然的速度优势就放弃了自己在效率方面的追求。 与此相反, Redis 的开发者在实现各项数据结构和特性的时候都经过了大量考量, 在底层选用了很多非常高效的数据结构和算法, 以此来确保每个操作都可以在尽可能短的时间内完成, 并且尽可能地节省内存。

对用户友好的API、文档以及社区:“虽然 Redis 提供了很多很棒的数据结构和特性, 但如果它们使用起来非常困难的话, 那么这一切就没有意义。” ——如果你对此有所担心的话, 那么现在可以打消你的疑虑了! Redis API 遵循的是 UNIX “一次只做一件事,并把它做好”的设计哲学, Redis 的 API 虽然丰富, 但它们大部分都非常简短, 并且只需接受几个参数就可以完成用户指定的操作。 更棒的是, Redis 在官方网站(redis.io)上为每个 API 以及相关特性都提供了详尽的文档, 并且客户端本身也可以在线查询这些文档。 当你遇到文档无法解决的问题时, 还可以在 Redis 项目的 GitHub 页面(github.com/antirez/redis)、 Google Group(groups.google.com/forum/#!forum/redis-db)甚至作者的 Twitter(twitter.com/antirez) 上提问。

广泛的支持:正如之前所说, Redis 已经得到了互联网公司的广泛使用, 许多开发者为不同的编程语言开发了相应的客户端(redis.io/clients), 绝大多数编程语言的使用者都可以轻而易举地找到他们所需的客户端, 然后直接开始使用 Redis 。 此外,包括亚马逊、谷歌、RedisLabs、阿里云和腾讯云在内的多个云服务提供商都提供了基于 Redis 或兼容 Redis 的服务, 如果你不打算自己搭建 Redis 服务器, 那么上述的这些提供商可能是一个不错的选择。

Redis 服务器通过接收客户端发送的命令请求来执行指定的命令, 并在命令执行完毕之后通过响应将命令的执行结果返回给客户端, 至于结果的内容则被称为命令回复

  • PING - 通常用于测试客户端和服务器之间的连接是否正常
1
2
127.0.0.1:6379> PING
PONG

但是, 如果用户给定了可选的消息, 那么服务器将原封不动地向客户端返回该消息:

1
2
127.0.0.1:6379> PING "hello world"
"hello world"

另一方面, 如果服务器与客户端的连接不正常, 那么客户端将返回一个错误:

1
2
3
-- 客户端未能连接服务器,返回一个连接错误
127.0.0.1:6379> PING
Could not connect to Redis at 127.0.0.1:6379: Connection refused
  • 可以在启动 Redis 服务器时通过给定 port 可选项来指定你想要的端口号
1
$ redis-server --port 10086

向 Redis 服务器提供配置选项的第二种方法则是在启动 Redis 服务器的时候为其提供配置文件, 并将想要修改的配置选项写在配置文件里面:

1
$ redis-server /path/to/your/file

比如说, 为了将 Redis 服务器的端口号改为 12345 , 我们可以在当前文件夹中创建配置文件 myredis.conf , 并在文件中包含以下内容:

1
port 12345

然后在启动 Redis 服务器时向其提供该配置文件:

1
$ redis-server myredis.conf

检查连接的脚本:

1
2
3
4
5
6
7
8
9
from redis import Redis

client = Redis()

# ping() 方法在连接正常时将返回 True
if client.ping() is True:
print("connecting")
else:
print("disconnected")

摘抄Redis使用手册