Redis CLI not showing recently stored key via Laravel
Asked Answered
J

5

9

I am trying to cache my results using redis in Laravel by doing this

$result =   Cache::remember('orders_cache', 10, function () use ($orders) {
           return $orders;
        });
        return $result;

When I go in my Redis-Cli and do KEYS *, I don't see orders_cache key there. I have set the cache_driver to redis in my .env and I also ran the command php artisan config:cache. I have also installed predis package using composer as well.

My Dev environment is:

  • PHP7.4
  • Ubuntu 20
  • Laravel 6.0
  • Redis 5.0.7

Any help on this would be appreciated. TIA

Jeepers answered 1/4, 2020 at 14:59 Comment(3)
try this commande redis-cli -n 1 keys "*" !Malchy
@Maraboc, I see this as an output (empty list or set)Jeepers
@Jeepers if you see (empty list or set) its because there is not anything in your databases, this command redis-cli -n 1 keys "*" says that show all keys in database with index of 1. that is your case this database is emptyOpportunism
O
18

Redis instance supports 16 logical databases and numbered from 0 to 15, by default by runnig redis-cli you connect to database 0. you can take advantage of the Redis INFO command to show databases that contain keys and also another more info like:

db0:keys=1,expires=0,avg_ttl=0
db1:keys=2,expires=2,avg_ttl=2462100

That in may case, I have 2 database. now you can change the database you’re using with the select command after you connect. for example:

select 1

and it will return OK if the switch is successful. now you can see your laravel keys.

Opportunism answered 13/12, 2020 at 17:6 Comment(1)
thanks for this comment. i have two question: why redis create other database in the same instance? how could i say it to laravel that use it the 0 database?Crackbrained
L
7

run redis-cli monitorand check the database number and written key.

Laticialaticiferous answered 26/7, 2020 at 17:45 Comment(0)
E
6

In recent versions of Laravel (8.^), it prepends the laravel_database with Redis keys.

E.g: laravel_database_{$YOUR_KEY}.

In order to see what keys are available RUN: KEYS *

Educatee answered 24/11, 2020 at 11:20 Comment(0)
H
0

I ran into a similar issue in where my key saved via Laravel was being returned, when queried via Laravel, using Redis::keys('*'), however a key saved via Python was not. I'm still not sure why (and separate databases as noted here was not the cause).

Interestingly, I was able to see the key, saved via Python, using Redis::scan('*') (docs). Even though scan returned the key, I am still not able to get it via Redis::get('key_name'). I need to do further research as to why this is the case, but this may be useful in finding your missing key.

Haft answered 10/2, 2021 at 14:36 Comment(0)
G
0

I have solved this issue using the help of @m.nikzad answer, but I didn't know what to do after, so I managed to do it this way:

  1. Monitor redis to determine data, database, etc..
  2. Connect to the database number.
  3. Retrieve the keys you want or all the keys, but be careful to retrieve all keys on a huge database!

So, practical:

  1. Monitoring: redis-cli -h <redis_host> monitor, where <redis_host> is your redis host, you will get something like SELECT n in the second line (ig), where n is the database number.
  2. Now you know the database number, let's connect to it: redis-cli -h <redis_host> -n <database_number>, where <redis_host> is your redis host & <database_number> is your database number that we just got in the previous step. If the redis port is different than the default port, please make sure to include -p <redis_port> to the command.
  3. Retrieve: either use KEYS *, KEYS <pattern>, or GET <key>, depending on your needs.

Resources:

  1. monitor
  2. keys
  3. get
Gustin answered 12/6, 2023 at 10:47 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.