-
-
Notifications
You must be signed in to change notification settings - Fork 2k
Description
if (true !== this->has(key)) { |
Description
After upgrading Phalcon from 4.0.6
to 5.8.0
and PHP from 7.2
to 8.3
, we noticed a performance issue related to the get
method when using Redis as a cache backend. The method first calls has
(which internally executes an EXISTS
command) before calling get
, effectively doubling the number of Redis operations. Under high traffic, this redundancy negatively impacts Redis performance.
Expected Behavior
The get
method should retrieve the value directly without first checking for existence, unless absolutely necessary. The default value handling should be done in a more optimized manner.
Current Behavior
- The
get
method first callshas
-> Redis executesEXISTS key
. - Then,
get
is called -> Redis executesGET key
. - This results in two commands for every single retrieval operation, reducing efficiency under load.
Steps to Reproduce
- Upgrade Phalcon from
4.0.6
to5.8.0
. - Use Redis as a cache backend.
- Call
$cache->get('some_key', 'default_value')
in a high-traffic scenario. - Monitor Redis and observe the
EXISTS
call happening beforeGET
.
Proposed Solution
Modify the get
method to avoid calling has
. Instead, rely on the GET
result directly:
- If
GET
returnsnull
(or false), use the default value. - This would eliminate the extra
EXISTS
call and improve Redis performance.
Environment
- Phalcon Version:
5.8.0
- PHP Version:
8.3
- Redis Version:
7.0.15
- Operating System:
Ubuntu 22.04
Would it be possible to optimize the get
method to avoid this redundancy? Looking forward to your feedback.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status