在 CakePHP 2.10.24 上调用未定义的方法 Redis::delete()

Posted

技术标签:

【中文标题】在 CakePHP 2.10.24 上调用未定义的方法 Redis::delete()【英文标题】:Call to undefined method Redis::delete() on CakePHP 2.10.24 【发布时间】:2021-04-08 02:22:18 【问题描述】:

我在 64 位 Amazon Linux/2.9.12 上运行的 AWS Elastic Beanstalk php 7.3 上运行应用程序,我最近开始收到以下错误 -

Call to undefined method Redis::delete()

我有一个可以读写的 Redis 缓存配置。但是当我尝试删除相同的内容时,我收到了上述错误。这以前没有发生过。我已经正确配置了缓存,如下所示

Cache::config('1min', [
'engine' => CACHE_ENGINE,
'server' => CACHE_HOST,
'port' => CACHE_PORT,
'prefix' => CACHE_PREFIX,
'duration'=>'+1 minute'
]);

并且我能够执行以下操作

Cache::write('cache1', 'value', '1min');
Cache::read('cache1', '1min');

没有任何错误。只有当我尝试使用以下命令删除密钥时

Cache::delete('cache1', '1min');

我收到上述错误。

我正在使用通过 .ebextensions 安装的 phpredis。我正在通过此链接下载包 -

https://github.com/phpredis/phpredis/archive/develop.zip -O phpredis.zip

在做一些研究后,我发现 Redis.php 中的删除功能已被弃用,因为很快就会被删除。当我在第 176 行更改 RedisEngine.php 文件中的函数调用(这是一个 CakePHP 库文件,它通过 composer 下载为依赖项)来自

public function delete($key) 
    return $this->_Redis->delete($key) > 0;

public function delete($key) 
    return $this->_Redis->del($key) > 0;

缓存删除工作正常。这以前没有发生过。如果我能尽早得到一些帮助,将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

在phpredis 的文档中写为注释:

注意:deletedel 的别名,将在未来的 phpredis 版本中删除。

考虑使用unlink 而不是deletedel 方法,因为unlink 是异步工作的,这不会阻止您的代码执行。

请注意,unlink 仅在您的 redis 版本等于或大于 4.0.0 时可用

【讨论】:

你好@GTsvetanov - 谢谢你的回答。当我浏览 PHPRedis 的文档时,我也意识到了上述情况,但“删除”的实际函数调用是从我通过 composer 下载的 CakePHP 库文件 RedisEngine.php 发生的。所以我认为这是需要在 CakePHP 作曲家下载时完成的更新? 您好@PrathameshDatar 我已经快速检查了一下,这是事实-discourse.cakephp.org/t/how-long-will-cakephp-2-x-be-supported/… 然后除了安全修复之外不再维护 2.x,因为 4.0 的发布日期是 2019 年 12 月所以如果您不会通过作曲家更新您的软件包,您可以直接在供应商软件包中解决问题(这不是一个好习惯!)。另一种方法是在他们的 git 中创建一个 PR,请求修复新版本 2.x 中的问题。

以上是关于在 CakePHP 2.10.24 上调用未定义的方法 Redis::delete()的主要内容,如果未能解决你的问题,请参考以下文章

错误:在 cakephp 的非对象上调用成员函数 create(),即使模型的名称已经定义

如果给定的操作不存在,则定义 Cakephp 路由以调用特定的控制器

CakePHP - 锚类不变(未定义的变量 $action)

致命错误:调用未定义的方法 CookieComponent::del()

在 CakePHP 项目中将自定义类和第三方类放在哪里?

CakePHP:表单输入(呈现为选择)未正确处理 hasOne 关系