Predis生态系统报告:插件/教程/社区资源全景图
【免费下载链接】predis 项目地址: https://gitcode.com/gh_mirrors/pre/predis
Predis是一个灵活且功能齐全的Redis客户端,适用于PHP 7.2及更高版本。它提供了丰富的特性和灵活的配置选项,能够满足各种Redis使用场景的需求。本报告将全面介绍Predis的生态系统,包括插件、教程和社区资源,帮助开发者更好地了解和使用这个强大的Redis客户端库。
核心功能概览
Predis提供了一系列强大的功能,使其成为PHP开发者与Redis交互的理想选择:
- 支持Redis 3.0到7.2版本
- 支持客户端分片集群和可插拔的键空间分发器
- 支持redis-cluster(Redis >= 3.0)
- 支持主从复制设置和redis-sentinel
- 透明的键前缀功能,带有可自定义的前缀策略
- 单节点和集群上的命令管道(仅客户端分片)
- Redis事务(Redis >= 2.0)和CAS操作(Redis >= 2.2)的抽象
- 基于PHP迭代器的SCAN、SSCAN、ZSCAN和HSCAN抽象
- 客户端在第一个命令时延迟建立连接,并且可以持久化
- 通过TCP/IP(也支持TLS/SSL加密)或UNIX域套接字建立连接
- 支持自定义连接类,提供不同的网络或协议后端
- 灵活的系统,用于定义自定义命令和覆盖默认命令
更多关于Predis的详细信息可以在项目教程:README.md中找到。
安装与基础使用
安装方法
Predis可以通过Composer轻松安装:
composer require predis/predis
如果您需要克隆仓库,仓库地址是:https://gitcode.com/gh_mirrors/pre/predis
加载库
Predis依靠PHP的自动加载功能在需要时加载其文件,并符合PSR-4标准。当通过Composer管理依赖项时,自动加载会自动处理,但在缺乏任何自动加载工具的项目或脚本中,也可以利用其自己的自动加载器:
// 如果Predis不在您的"include_path"中,请添加基本路径。
require 'Predis/Autoloader.php';
Predis\Autoloader::register();
连接到Redis
创建客户端实例时不传递任何连接参数,Predis会假设127.0.0.1和6379作为默认主机和端口。connect()操作的默认超时时间为5秒:
$client = new Predis\Client();
$client->set('foo', 'bar');
$value = $client->get('foo');
连接参数可以以URI字符串或命名数组的形式提供。后者是提供参数的首选方式,但当从非结构化或部分结构化源读取参数时,URI字符串可能很有用:
// 使用命名数组传递参数:
$client = new Predis\Client([
'scheme' => 'tcp',
'host' => '10.0.0.1',
'port' => 6379,
]);
// 相同的参数集,使用URI字符串传递:
$client = new Predis\Client('tcp://10.0.0.1:6379');
密码保护的服务器可以通过在参数集中添加password来访问。当Redis >= 6.0上启用ACL时,用户认证需要用户名和密码。
也可以使用UNIX域套接字连接到本地Redis实例,在这种情况下,参数必须使用unix方案并指定套接字文件的路径:
$client = new Predis\Client(['scheme' => 'unix', 'path' => '/path/to/redis.sock']);
$client = new Predis\Client('unix:/path/to/redis.sock');
客户端可以利用TLS/SSL加密连接到安全的远程Redis实例,而无需配置像SSL代理这样的中间件。当连接到各种云托管提供商上运行的节点时,这可能很有用。可以使用tls方案并通过ssl参数传递合适的选项数组来启用加密:
// 连接参数的命名数组:
$client = new Predis\Client([
'scheme' => 'tls',
'ssl' => ['cafile' => 'private.pem', 'verify_peer' => true],
]);
// 相同的参数集,但使用URI字符串:
$client = new Predis\Client('tls://127.0.0.1?ssl[cafile]=private.pem&ssl[verify_peer]=1');
高级功能
聚合连接
聚合连接是Predis实现集群和复制的基础,它们用于将多个连接分组到单个Redis节点,并隐藏根据上下文正确处理它们所需的特定逻辑。创建新客户端实例时,聚合连接通常需要数组的连接参数以及适当的客户端选项。
集群
Predis可以配置为在集群模式下工作,使用传统的客户端分片方法创建独立节点的集群,并在它们之间分发键空间。这种方法需要某种节点的外部健康监控,并且在添加或删除节点时需要手动重新平衡键空间:
$parameters = ['tcp://10.0.0.1', 'tcp://10.0.0.2', 'tcp://10.0.0.3'];
$options = ['cluster' => 'predis'];
$client = new Predis\Client($parameters);
随着Redis 3.0的发布,以redis-cluster的形式引入了一种新的受监督和协调类型的集群。这种方法使用不同的算法来分发键空间,Redis节点通过 gossip协议进行通信,以处理健康状态、重新平衡、节点发现和请求重定向。为了连接到由redis-cluster管理的集群,客户端需要其节点列表(不一定完整,因为如果需要,它会自动发现新节点),并且cluster客户端选项设置为redis:
$parameters = ['tcp://10.0.0.1', 'tcp://10.0.0.2', 'tcp://10.0.0.3'];
$options = ['cluster' => 'redis'];
$client = new Predis\Client($parameters, $options);
集群相关的源代码可以在Cluster模块中找到。
复制
客户端可以配置为在单个主/多个从设置中运行,以提供更好的服务可用性。使用复制时,Predis识别只读命令并将它们发送到随机从节点,以提供某种负载平衡,并在检测到执行任何类型的操作(最终会修改键空间或键值)的命令时切换到主节点。当从节点失败时,客户端不会引发连接错误,而是尝试回退到提供的配置中的其他从节点。
在复制模式下使用客户端所需的基本配置要求将一个Redis服务器标识为主节点(这可以通过连接参数完成,将role参数设置为master)和一个或多个从节点(在这种情况下,为从节点将role设置为slave是可选的):
$parameters = ['tcp://10.0.0.1?role=master', 'tcp://10.0.0.2', 'tcp://10.0.0.3'];
$options = ['replication' => 'predis'];
$client = new Predis\Client($parameters, $options);
上述配置具有静态服务器列表,完全依赖客户端的逻辑,但可以依靠redis-sentinel获得更强大的HA环境,其中sentinel服务器充当客户端的服务发现权威来源。客户端使用redis-sentinel所需的最小配置是指向一堆sentinel实例的连接参数列表,replication选项设置为sentinel,service选项设置为服务名称:
$sentinels = ['tcp://10.0.0.1', 'tcp://10.0.0.2', 'tcp://10.0.0.3'];
$options = ['replication' => 'sentinel', 'service' => 'mymaster'];
$client = new Predis\Client($sentinels, $options);
复制相关的源代码可以在Replication模块中找到。
命令管道
当需要向服务器发送许多命令时,管道可以通过减少网络往返时间引入的延迟来帮助提高性能。管道也适用于聚合连接。客户端可以在可调用块内执行管道,或返回具有流畅接口的管道实例,能够链接命令:
// 在给定的可调用块内执行管道:
$responses = $client->pipeline(function ($pipe) {
for ($i = 0; $i < 1000; $i++) {
$pipe->set("key:$i", str_pad($i, 4, '0', 0));
$pipe->get("key:$i");
}
});
// 返回可以通过其流畅接口链接的管道:
$responses = $client->pipeline()->set('foo', 'bar')->get('foo')->execute();
管道相关的源代码可以在Pipeline模块中找到。
事务
客户端提供基于MULTI和EXEC的Redis事务抽象,具有与命令管道类似的接口:
// 在给定的可调用块内执行事务:
$responses = $client->transaction(function ($tx) {
$tx->set('foo', 'bar');
$tx->get('foo');
});
// 返回可以通过其流畅接口链接的事务:
$responses = $client->transaction()->set('foo', 'bar')->get('foo')->execute();
这个抽象可以通过WATCH和UNWATCH执行检查和设置操作,并在WATCHed键被触碰时提供Redis中止的事务的自动重试。有关使用CAS的事务示例,您可以参见以下示例。
事务相关的源代码可以在Transaction模块中找到。
示例与教程
Predis提供了丰富的示例代码,帮助开发者快速上手和深入理解各种功能。这些示例涵盖了从基本命令执行到高级功能如集群、复制、管道和事务等各个方面。
基础示例
高级示例
- 自定义集群分发器:展示了如何实现自定义的集群分发策略。
- 可调试连接:演示了如何创建可调试的连接。
- 调度循环:展示了如何实现一个调度循环。
- 监控消费者:演示了如何创建一个监控消费者。
- 发布订阅消费者:展示了如何实现发布订阅功能。
- Redis集合迭代器:演示了如何使用Redis集合迭代器。
- 中继压缩:展示了如何使用中继压缩功能。
- 中继连接:演示了如何使用中继连接。
- 中继事件:展示了如何处理中继事件。
- 中继发布订阅消费者:演示了如何使用中继发布订阅消费者。
- 复杂复制:展示了如何配置和使用复杂的复制设置。
- Sentinel复制:演示了如何使用Sentinel进行复制。
- 简单复制:展示了如何配置简单的主从复制。
- 会话处理器:演示了如何使用Predis作为会话处理器。
命令示例
Predis提供了各种Redis命令的示例,涵盖了不同的Redis模块和功能:
搜索命令示例
- ft_aggregate.php
- ft_alter.php
- ft_config_help.php
- ft_config_set_get.php
- ft_cursor_del.php
- ft_cursor_read.php
- ft_explain.php
- ft_profile.php
- ft_spellcheck.php
- ft_sug_add_get_del_len.php
- ft_syndump.php
- ft_synupdate.php
- ft_tagvals.php
时间序列命令示例
- ts_add.php
- ts_alter.php
- ts_create.php
- ts_createrule.php
- ts_decrby.php
- ts_del.php
- ts_deleterule.php
- ts_get.php
- ts_incrby.php
- ts_info.php
- ts_madd.php
- ts_mget.php
- ts_mrange.php
- ts_mrevrange.php
- ts_queryindex.php
- ts_range.php
- ts_revrange.php
其他命令示例
- ACL命令示例:展示了如何使用ACL命令。
- FCALL_RO命令示例:演示了如何使用FCALL_RO命令。
- WAITAOF命令示例:展示了如何使用WAITAOF命令。
社区资源与支持
Predis拥有一个活跃的社区,提供了丰富的资源和支持渠道,帮助开发者解决问题和获取最新的信息。
官方文档
测试资源
Predis提供了全面的测试套件,确保库的质量和稳定性。测试相关的代码可以在tests目录中找到。
- PHPUnit测试用例:包含各种PHPUnit测试用例。
- Predis测试:包含Predis各个模块的测试。
社区支持
虽然Predis没有官方的论坛,但开发者可以通过以下渠道获取支持:
- GitHub Issues:通过项目的GitHub仓库提交问题和功能请求。
- Stack Overflow:在Stack Overflow上使用"predis"标签提问。
- 相关博客和教程:许多开发者在博客上分享了使用Predis的经验和技巧。
总结
Predis是一个功能强大、灵活且易于扩展的Redis客户端库,为PHP开发者提供了与Redis交互的全面解决方案。它支持各种高级功能,如集群、复制、管道和事务等,同时提供了丰富的示例和文档,帮助开发者快速上手。
通过本报告,我们全面介绍了Predis的生态系统,包括其核心功能、安装使用、高级特性、示例教程和社区资源。希望这份报告能够帮助开发者更好地了解和使用Predis,充分利用Redis的强大功能来构建高性能的应用程序。
无论是对于初学者还是有经验的开发者,Predis都提供了足够的灵活性和功能来满足各种Redis使用场景的需求。随着Redis的不断发展,Predis也在持续更新和改进,为开发者提供更好的体验和更多的功能支持。
如果您有任何问题或需要进一步的帮助,请查阅项目文档或通过社区渠道寻求支持。祝您使用Predis开发愉快!
【免费下载链接】predis 项目地址: https://gitcode.com/gh_mirrors/pre/predis
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



