I am using Laravel 5.4, with Predis and the latest Redis (or Redis for Windows).
The keys are being saved without issue. So, I doubt it's a configuration issue.
The problem is that they are not expiring. The key is reused until it expires...similar to how a session works.
I create the key once, if it does not exist. In that same logic I then set the expiration time.
In the Controller, I have
use Illuminate\Support\Facades\Redis;
In one of the functions, Get the connection instance:
$redis = Redis::connection();
Before I create the key, I check the existence (simplified) then create and set expiration.
if(!$redis->exists($some_unique_key))
{
//set the key
$redis->set($some_unique_key, 'Some Value'));
//set the expiration
//I understand this means expire in 60s.
$redis->expire($some_unique_key,60);
}
Why could it not be expiring the key?
As I mentioned, everything else works. I see the key updating without issue if I monitor, and can query it.
For the record, I have read:
- Why Redis keys are not expiring?
- Laravel flash or session messages not expiring [ not maintained Updated ]
- my redis keys do not expire
There is nothing on expiration on the Laravel documentation:
UPDATE 1
Investigating a possible cause where setting(updating) the key resets the expiry
UPDATE 2
Used @for_thestack's reasoning (in REDIS commands) to come up with the solution. See my answer with the code. Feel free to upvote @for_thestack :)
TTL
for the key to check it – PallatenTTL
in the process of getting to my answer – Oxidase