在 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 的文档中写为注释:
注意:
delete
是del
的别名,将在未来的 phpredis 版本中删除。
考虑使用unlink
而不是delete
和del
方法,因为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)