since / redis
一个基于PHP 8+的高性能Redis客户端库,提供连接池+门面模式和原始单例模式两种使用方式,支持Redis所有数据结构操作,包含完整的类型声明和异常处理机制。
This package is auto-updated.
Last update: 2025-09-19 08:32:02 UTC
README
一个基于PHP 8+的高性能Redis客户端库,提供连接池+门面模式和原始单例模式两种使用方式,支持Redis所有数据结构操作,包含完整的类型声明和异常处理机制。
特性
- ✅ 支持连接池管理,有效控制连接资源
- ✅ 提供门面模式设计,简化API调用
- ✅ 支持单例模式,兼容传统使用习惯
- ✅ 完整支持Redis所有数据结构操作
- ✅ 包含完善的类型声明,支持IDE自动补全
- ✅ 提供异常处理机制,提高代码健壮性
- ✅ 基于PHP 8+语法,充分利用现代PHP特性
安装
使用Composer安装:
composer require since/redis
系统要求
- PHP 8.0+
- Redis扩展 (
ext-redis
) - JSON扩展 (
ext-json
)
使用方法
1. 门面模式(连接池)使用方式
门面模式是推荐的使用方式,它通过连接池管理Redis连接,适合高并发场景。
// 引入自动加载文件 require_once 'vendor/autoload.php'; use since\RedisFacade; // 获取RedisFacade实例(可配置连接参数) $redis = RedisFacade::getInstance([ 'host' => '127.0.0.1', // Redis服务器地址 'port' => 6379, // Redis端口 'password' => '', // Redis密码(如无密码则为空) 'database' => 0, // 数据库索引 'timeout' => 2, // 连接超时时间(秒) 'max_connections' => 10, // 最大连接数 ]); // 字符串操作示例 $redis->string()->set('name', 'RedisClient'); $name = $redis->string()->get('name'); // 哈希操作示例 $redis->hash()->hSet('user:1', 'name', '张三'); $redis->hash()->hSet('user:1', 'age', 25); $userInfo = $redis->hash()->hGetAll('user:1'); // 列表操作示例 $redis->list()->lpush('list', 'item1'); $redis->list()->lpush('list', 'item2'); $items = $redis->list()->lrange('list', 0, -1); // 键操作示例 $redis->key()->expire('name', 3600); $exists = $redis->key()->exists('name');
2. 单例模式使用方式
单例模式是传统的使用方式,适合简单场景:
// 引入自动加载文件 require_once 'vendor/autoload.php'; use since\Redis; // 获取Redis实例(可配置连接参数) $redis = Redis::getInstance([ 'host' => '127.0.0.1', // Redis服务器地址 'port' => 6379, // Redis端口 'password' => '', // Redis密码(如无密码则为空) 'select' => 0, // 数据库索引 'timeout' => 0, // 连接超时时间(秒) 'expire' => 0, // 默认过期时间(秒) 'persistent' => false, // 是否使用持久连接 'prefix' => '', // 键前缀 'serialize' => true, // 是否自动序列化 ]); // 直接调用Redis方法 $redis->set('name', 'RedisClient'); $name = $redis->get('name'); $redis->expire('name', 3600);
支持的数据结构和操作
本库支持Redis的所有数据结构操作,通过不同的操作类提供:
数据结构 | 操作类 | 门面方法 | 描述 |
---|---|---|---|
String | StringOperation | string() | 字符串类型操作 |
Hash | HashOperation | hash() | 哈希表类型操作 |
List | ListOperation | list() | 列表类型操作 |
Set | SetOperation | set() | 集合类型操作 |
SortedSet | SortedSetOperation | sortedSet() | 有序集合类型操作 |
Geo | GeoOperation | geo() | 地理空间类型操作 |
HyperLogLog | HyperLogLogOperation | hyperLogLog() | 基数统计类型操作 |
Stream | StreamOperation | stream() | 流类型操作 |
Key | KeyOperation | key() | 键操作 |
连接池配置
连接池模式下的主要配置参数:
$config = [ 'host' => '127.0.0.1', // Redis服务器地址 'port' => 6379, // Redis端口 'password' => '', // Redis密码 'database' => 0, // 数据库索引 'timeout' => 2, // 连接超时时间(秒) 'max_connections' => 10, // 最大连接数 ]; $redis = RedisFacade::getInstance($config);
单例模式配置
单例模式下的主要配置参数:
$options = [ 'host' => '127.0.0.1', // Redis服务器地址 'port' => 6379, // Redis端口 'password' => '', // Redis密码 'select' => 0, // 数据库索引 'timeout' => 0, // 连接超时时间(秒) 'expire' => 0, // 默认过期时间(秒) 'persistent' => false, // 是否使用持久连接 'prefix' => '', // 键前缀 'serialize' => true, // 是否自动序列化 ]; $redis = Redis::getInstance($options);
异常处理
本库提供了完善的异常处理机制,使用时建议添加try-catch块捕获可能的异常:
try { $redis->string()->set('name', 'RedisClient'); $name = $redis->string()->get('name'); } catch (\Exception $e) { // 处理异常 echo 'Redis操作失败: ' . $e->getMessage(); }
最佳实践
-
高并发场景推荐使用门面模式(连接池):
- 连接池能有效管理和复用连接资源
- 避免频繁建立和关闭连接的开销
- 控制最大连接数,防止连接耗尽
-
合理设置连接池参数:
- 根据系统负载和Redis服务器性能设置
max_connections
- 适当设置
timeout
,避免连接等待时间过长
- 根据系统负载和Redis服务器性能设置
-
使用键前缀:
- 在多项目或多环境共用Redis时,设置不同的键前缀避免键冲突
-
合理设置过期时间:
- 对临时数据设置合适的过期时间,避免Redis内存占用过高
-
错误处理:
- 始终使用try-catch捕获Redis操作可能抛出的异常
- 考虑添加重试机制,处理临时性网络问题
性能优化
-
使用管道(Pipeline):
- 对于批量操作,使用管道减少网络往返次数
-
合理使用事务:
- 对需要原子性的操作,使用Redis事务
-
避免大键:
- 尽量避免存储过大的值,影响Redis性能
版本历史
1.0.0
- 初始版本
- 支持连接池和单例模式
- 支持所有Redis数据结构操作
- 提供完整的类型声明和异常处理
许可证
本项目使用MIT许可证 - 详见LICENSE文件
作者信息
- 作者:湛工
- 邮箱:1140099248@qq.com