【问题标题】:Redis CLI - access keys from Laravel Cache connectionRedis CLI - 从 Laravel 缓存连接访问密钥
【发布时间】:2020-05-02 09:17:32
【问题描述】:

我可以使用以下代码通过 cli 连接到我的 Redis 实例:

redis-cli -p 6999 -a password

为安全起见更改了端口和密码。

这会打开一个 redis REPL,我可以通过 keys * 看到我的 Redis 实例上的所有键。

但是,它实际上并没有显示我的所有密钥。我将 Laravel Cache 与 redis 驱动程序(Cache::remember 接口)一起使用,在 Laravel 内部,我可以通过 $keys = Redis::connection('cache')->keys('*'); 列出所有键——这向我展示了与我在 repl 中看到的非常不同的列表。

我通过默认连接在 Laravel 中设置的任何键都显示在 cli repl 中,但没有通过缓存设置的任何键。

有没有办法在cli repl中查看通过::connection('cache')设置的键?

【问题讨论】:

    标签: laravel redis


    【解决方案1】:

    您可能正在使用多个 Redis 数据库。

    您可以通过查看config/database.php了解您的缓存存储在哪个数据库中

       /*
        |--------------------------------------------------------------------------
        | Redis Databases
        |--------------------------------------------------------------------------
        |
        | Redis is an open source, fast, and advanced key-value store that also
        | provides a richer body of commands than a typical key-value system
        | such as APC or Memcached. Laravel makes it easy to dig right in.
        |
        */
    
        'redis' => [
            'client' => env('REDIS_CLIENT', 'phpredis'),
    
            'options' => [
                'cluster' => env('REDIS_CLUSTER', 'redis'),
                'prefix'  => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'),
            ],
    
            'default' => [
                'url'      => env('REDIS_URL'),
                'host'     => env('REDIS_HOST', '127.0.0.1'),
                'password' => env('REDIS_PASSWORD', null),
                'port'     => env('REDIS_PORT', 6379),
                'database' => env('REDIS_DB', 0),
            ],
    
            'cache' => [
                'url'      => env('REDIS_URL'),
                'host'     => env('REDIS_HOST', '127.0.0.1'),
                'password' => env('REDIS_PASSWORD', null),
                'port'     => env('REDIS_PORT', 6379),
                'database' => env('REDIS_CACHE_DB', 1),
            ],
        ],
    

    要在redic-cli 中的数据库之间切换,您可以在 CLI 中运行以下命令:

    SELECT 1

    如果您没有使用缓存数据库的设置显式更新您的 .env 文件,那么您的缓存将位于 DB 1 中

    【讨论】:

    • 谢谢。那行得通。但是,它做了一些奇怪的事情:我在共享主机上,但我只是与我也拥有的其他服务器共享它,并且我为该单一共享服务器上的每个网站设置了 redis,我的每个网站都有它的自己的Redis端口(比如上面一个用3000,另一个用3001,另一个用3002)
    • 所以我登录了端口 3000 的 cli,当我执行 keys * 时,我显然可以看到 3001 和 3002 的值。这……正常吗?
    • 说实话,我不适合问 Redis 的内部工作。但是,如果您有多个 Redis 实例正在运行,它们不应该共享数据库!
    猜你喜欢
    • 2020-01-03
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2020-07-13
    • 2019-04-22
    • 1970-01-01
    • 2020-05-30
    • 2017-10-08
    相关资源
    最近更新 更多