本系列终章
客户端库在构建Redis-py方式上遵循协议是很常见的。在这种情况下,redis-py实现REdis 序列化协议或 RESP。
实现此协议的一部分包括将一些 Python 对象转换为原始字节串,将其发送到 Redis 服务器,并将响应解析回可理解的 Python 对象。
例如,字符串响应“OK”将返回为"+OK\r\n",而整数响应 1000 将返回为":1000\r\n"。对于其他数据类型,例如RESP 数组,这可能会变得更加复杂。
解析器是请求-响应周期中的一个工具,它解释这个原始响应并将其制作成客户可以识别的东西。redis-py附带它自己的解析器类,PythonParser它在纯 Python 中进行解析。(看看.read_response()你是否好奇。)
但是,还有一个 C 库Hiredis,其中包含一个快速解析器,可以为某些 Redis 命令提供显着加速,例如LRANGE. 您可以将 Hiredis 视为一个可选的加速器,在小众情况下使用它并没有什么坏处。
启用redis-pyHiredis 解析器所需要做的就是将其 Python 绑定安装在与以下相同的环境中redis-py:
$ python -m pip install hiredis
您在此处实际安装的是,它是C 库hiredis-py的一部分的 Python 包装器。hiredis
好消息是你真的不需要给hiredis自己打电话。只是pip install它,这将让我们redis-py看到它可用并使用它HiredisParser而不是PythonParser.
在内部,redis-py将尝试导入 hiredis,并使用一个HiredisParser类来匹配它,但会退回到它PythonParser,这在某些情况下可能会更慢:
# redi try: import hiredis HIredis_AVAILABLE = True except importError: HIREDIS_AVAILABLE = False # redi if HIREDIS_AVAILABLE: DefaultParser = HiredisParser else: DefaultParser = PythonParser
移除广告
使用企业 Redis 应用程序
虽然 Redis 本身是开源和免费的,但已经出现了一些托管服务,它们提供了一个以 Redis 为核心的数据存储,以及一些构建在开源 Redis 服务器之上的附加功能:
- amazon ElastiCache for Redis:这是一项 Web 服务,可让您在云中托管 Redis 服务器,您可以从 Amazon EC2 实例连接到该服务器。有关完整的设置说明,您可以浏览 Amazon 的ElastiCache for Redis启动页面。
- Microsoft 的 Azure Redis 缓存:这是另一项功能强大的企业级服务,可让您在云中设置可自定义的安全 Redis 实例。
两者的设计有一些共同点。您通常为缓存指定自定义名称,该名称作为 DNS 名称的一部分嵌入,例如demo.abcdef.xz.0009.u(AWS) 或demo.redis.cac(Azure)。
设置完成后,这里有一些关于如何连接的快速提示。
从命令行来看,它与我们之前的示例大致相同,但您需要使用h标志指定主机,而不是使用默认的 localhost。对于Amazon AWS,从您的实例 shell 执行以下命令:
$ export REDIS_ENDPOINT="demo.abcdef.xz.0009.u" $ redis-cli -h $REDIS_ENDPOINT
对于Microsoft Azure,您可以使用类似的调用。Azure Cache for Redis默认使用 SSL(端口 6380)而不是端口 6379,允许与 Redis 进行加密通信,而 TCP 不能这样说。除此之外,您需要提供的只是一个非默认端口和访问密钥:
$ export REDIS_ENDPOINT="demo.redis.cac" $ redis-cli -h $REDIS_ENDPOINT -p 6380 -a <primary-access-key>
该-h标志指定一个主机,如您所见127.0.0.1,默认情况下是 (localhost)。
当您redis-py在 Python 中使用时,最好将敏感变量排除在 Python 脚本本身之外,并注意您为这些文件提供的读写权限。Python 版本如下所示:
>>>
>>> import os >>> import redis >>> # Specify a DNS endpoint instead of the default localhost >>> os.environ["REDIS_ENDPOINT"] 'demo.abcdef.xz.0009.u' >>> r = redis.Redis(host=os.environ["REDIS_ENDPOINT"])
这里的所有都是它的。除了指定不同的host,您现在还可以调用与命令相关的方法,例如r.get()normal.
注意:如果您只想使用redis-py和 AWS 或 Azure Redis 实例的组合,那么您实际上不需要在您的计算机上本地安装和制作 Redis 本身,因为您不需要redis-cli或redis-server。
如果您正在部署 Redis 发挥关键作用的中型到大型生产应用程序,那么使用 AWS 或 Azure 的服务解决方案可能是一种可扩展、经济高效且具有安全意识的操作方式。
总结
我们通过 Python 访问 Redis 的旋风之旅到此结束,包括安装和使用连接到 Redis 服务器的 Redis REPL 以及redis-py在实际示例中的使用。以下是您学到的一些内容:
- redis-py让您通过直观的 Python API 完成(几乎)您可以使用 Redis CLI 完成的所有操作。
- 掌握持久性、序列化、加密和压缩等主题可以让您充分利用 Redis。
- 在更复杂的情况下,Redis 事务和管道是库的重要组成部分。
- 企业级 Redis 服务可以帮助您在生产中顺利使用 Redis。
Redis 具有广泛的功能集,其中一些我们没有真正在这里介绍,包括服务器端 Lua 脚本、分片和主从复制。