首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Laravel 5应用程序中将Redis配置为Cache接口

在Laravel 5应用程序中将Redis配置为Cache接口
EN

Stack Overflow用户
提问于 2019-06-24 20:52:14
回答 3查看 9.2K关注 0票数 8

我有一个Laravel应用程序,我正在将Redis服务器集成到其中来处理应用程序缓存。但是,我对Redis配置有问题,因为我无法使用Laravel缓存外观访问Redis接口。

我设置了一个redis服务器,并确认它正在服务器上工作:

代码语言:javascript
运行
复制
> redis-cli
127.0.0.1:6379 > ping
PONG

然后,我从这里了解了Redis/Laravel的集成文档:https://laravel.com/docs/5.7/redis

我安装了作曲家predis/predis软件包..。

我在Laravel中将其设置为使用默认的redis配置:

app/config/cache.php:

代码语言:javascript
运行
复制
'default' => env('CACHE_DRIVER', 'redis'),

app/config/database.php:

代码语言:javascript
运行
复制
'redis' => [

    'client' => 'predis',

    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
    ],

    'cache' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_CACHE_DB', 1),
    ],
]

.env:

代码语言:javascript
运行
复制
BROADCAST_DRIVER=log
CACHE_DRIVER=redis
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

现在,当我测试时,我可以通过Redis Facade访问Redis .

使用照明\支持\正面\红色;

...but不是来自缓存外观

使用照明\支持\正面\缓存;

代码语言:javascript
运行
复制
    // ************* this works
    Redis::set('testFromRedisSet', 'RedisSet');

    // ************* none of these work...
    Cache::store('redis')->put('testFromStoreCachePut', 'CacheStorePut', 600);

    Cache::put('testFromCachePut', 'CachePut', 600);

    Cache::remember('testFromCacheRemember', 60, function() {
       return "CacheRemember";
    });
    Cache::rememberForever('testFromCacheRememberForever', function() {
        return "CacheRememberForever";
    });

127.0.0.1:6379>键'*‘ 1) "testFromRedisSet“ 127.0.0.1:6379>

有趣的是,缓存外观似乎仍然正常工作。如果我监视望远镜中的缓存请求,则示例中没有显示在Redis Server中的4个缓存请求仍然被缓存在某处,并且使用缓存外观检索这4个值很好。

...all检索正确的值:

代码语言:javascript
运行
复制
Cache::get('testFromCacheStoreRedisPut');
Cache::get('testFromCachePut');
Cache::get('testFromCacheRemember');
Cache::get('testFromCacheRememberForever');

,这是怎么回事?

看起来Laravel正确地使用了redis缓存驱动程序,因为当我关闭Redis服务器并重新测试应用程序时,整个应用程序抛出一个Predis连接异常

在AbstractConnection.php第155行:连接拒绝tcp://127.0.0.1:6379

缓存密钥存储在哪里,为什么我不能使用“redis-cli”查看终端中存储的密钥?

红宝石键'*‘

监视Redis Server显示,Redis正在存储数据并推送事件通知,但在术语中看不到的所有数据都以laravel_cache作为前缀。但是,接口中没有该名称的数据或哈希键。

代码语言:javascript
运行
复制
1561596707.950397 [1 127.0.0.1:42058] "SETEX" "laravel_cache:testFromCacheStoreRedisPut" "36000" "s:18:\"CacheStoreRedisPut\";"
1561596707.950898 [1 127.0.0.1:42058] "SETEX" "laravel_cache:testFromCachePut" "36000" "s:8:\"CachePut\";"
1561596707.951521 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCacheRemember"
1561596707.952110 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCacheRememberForever"
1561596707.952718 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCacheStoreRedisPut"
1561596707.953236 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCachePut"
1561596707.953745 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCacheRemember"
1561596707.954191 [1 127.0.0.1:42058] "GET" "laravel_cache:testFromCacheRememberForever"
1561596709.251036 [0 127.0.0.1:42064] "SELECT" "1"
1561596709.251200 [1 127.0.0.1:42064] "GET" "laravel_cache:telescope:dump-watcher"
1561596709.263678 [1 127.0.0.1:42064] "GET" "laravel_cache:telescope:pause-recording"

如何访问存储在laravel_cache 命名空间中的数据?即使运行服务器监视器中显示的相同的GET 命令,也不会直接获取任何数据。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-27 16:02:15

默认情况下,Redis高速缓存存储使用cache数据库连接。如果您查看config/database.php,默认情况下它会切换到数据库1进行缓存。要查看终端中的键,必须首先使用select数据库。

代码语言:javascript
运行
复制
127.0.0.1:6379> SELECT 1
127.0.0.1:6379[1]> KEYS *

使用不同的数据库可以将缓存和会话存储分开,当您需要删除所有缓存密钥(flushdb)但保留用户会话时,这是非常方便的。您甚至可以为队列添加一个单独的连接。注意,要使用多个数据库,不推荐要使用多个Redis实例。

票数 18
EN

Stack Overflow用户

发布于 2019-06-24 20:57:03

正如注释中提到的,正确设置默认值比显式定义存储更好。

您需要指定商店:

Cache::store('redis')->put('bar', 'baz', 600); // 10 Minutes

https://laravel.com/docs/5.8/cache#cache-usage

票数 0
EN

Stack Overflow用户

发布于 2019-12-23 11:16:26

简单解决方案!

config\database.php中用1更新default & cache的值

代码语言:javascript
运行
复制
'redis' => [

    'default' => [

         // Other settings...

        'database' => env('REDIS_DB', 1),
    ],

    'cache' => [

         // Other settings...

        'database' => env('REDIS_CACHE_DB', 1),
    ],

],
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56743790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档