使用 Redis 驱动 deleteMultiple 出错
- Ngôn ngữ chính
- PHP
- Star
- 3
- Fork
- 4
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
在我使用 PhpSpreadsheet 生成电子表格时,我希望使用 Redis 作为缓存类。文档中指出,我可以直接从容器中获取 Psr\SimpleCache\CacheInterface 以得到一个符合PSR-16 的缓存类。按文档操作。
运行时程序抛出了警告错误:
```
PHP Warning: array_map(): Expected parameter 2 to be an array, object given in /Users/splitter/Project/zhentu-oa/vendor/hyperf/cache/src/Driver/RedisDriver.php on line 112
Warning: array_map(): Expected parameter 2 to be an array, object given in /Users/splitter/Project/zhentu-oa/vendor/hyperf/cache/src/Driver/RedisDriver.php on line 112
PHP Warning: Only arrays and Traversables can be unpacked in /Users/splitter/Project/zhentu-oa/vendor/hyperf/cache/src/Driver/RedisDriver.php on line 116
```
和致命错误:
```
Wrong parameter count for Redis::del()[193] in /Users/splitter/Project/zhentu-oa/vendor/hyperf/redis/src/RedisConnection.php
```
查阅源码,发现抛出Warning 的原因是 deleteMultiple 传入了一个 Generator 而非数组。
我尝试以下面方法解决:
```php
public function deleteMultiple($keys)
{
$cacheKeys = array_map(function ($key) {
return $this->getCacheKey($key);
}, array(...$keys));
return (bool) $this->redis->del(...$cacheKeys);
}
```
但是对于致命错误,我不得不重写 deleteMultiple 方法(虽然Redis 中的键的确被删除)
```php
public function deleteMultiple($keys)
{
foreach ($keys as $key) {
$this->redis->del($this->getCacheKey($key));
}
return true;
}
```
我不清楚是我的使用方法不正确或是驱动本身存在缺陷?
环境:
- hyperf/cache:2.2.15
- redis:5.0.6
- redis-ext:5.3.7
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu với hyperf/cache/src/Driver/RedisDriver.php, đặc biệt là deleteMultiple ở khoảng dòng 112 và 116, rồi tái hiện lời gọi PSR-16 với một Generator các khóa. Kiểm tra các lỗi đã được báo cáo của array_map, việc unpacking và Redis::del. Hoàn tất khi deleteMultiple chấp nhận đầu vào được tài liệu hóa, xóa các khóa và hoàn thành mà không có cảnh báo hoặc lỗi nghiêm trọng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- php, redis
- Lĩnh vực
- backend, databases
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 38/100