hyperf / hyperf/cache

使用 Redis 驱动 deleteMultiple 出错

Đang mở
#5 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
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

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.