gpt4 book ai didi

php - 在 Laravel 5 应用程序中将 Redis 配置为缓存接口(interface)

转载 作者:IT王子 更新时间:2023-10-29 05:59:48 24 4
gpt4 key购买 nike

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

我设置了一个 redis-server 并确认它正在服务器上运行:

> redis-cli
127.0.0.1:6379 > ping
PONG

然后我从这里开始关注 Redis/Laravel 的集成文档: https://laravel.com/docs/5.7/redis

我安装了 composer predis/predis 包...
我在 Laravel 中将其设置为使用默认的 Redis 配置:

app/config/cache.php:

'default' => env('CACHE_DRIVER', 'redis'),

app/config/database.php:

'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),
],
]

.环境:

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...

use Illuminate\Support\Facades\Redis;

...但不是来自缓存门面

use Illuminate\Support\Facades\Cache;

    // ************* 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> KEYS '*'
1) "testFromRedisSet"
127.0.0.1:6379>


有趣的是,Cache Facade 似乎仍然正常运行。如果我监控 Telescope 中的缓存请求,示例中未显示在 Redis 服务器 中的 4 个缓存请求仍在某处缓存,并使用 Cache facade检索这 4 个值工作正常。

...所有这些都检索到正确的值:

Cache::get('testFromCacheStoreRedisPut');
Cache::get('testFromCachePut');
Cache::get('testFromCacheRemember');
Cache::get('testFromCacheRememberForever');

那么这里发生了什么?

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

In AbstractConnection.php line 155: Connection refused [tcp://127.0.0.1:6379]

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

redis-cli KEYS '*'

监控 Redis 服务器 显示 Redis 正在存储数据并推送事件通知,但我在终端中看不到的所有数据都带有前缀 laravel_cache。但是,界面中不存在具有该名称的数据或哈希键。

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 命令也不会直接获取任何数据。

最佳答案

Redis cache store默认使用 cache 数据库连接。如果你看config/database.php它默认切换到数据库 1 进行缓存。要在终端中查看 key ,您必须选择首先使用哪个数据库。

127.0.0.1:6379> SELECT 1
127.0.0.1:6379[1]> KEYS *

使用不同的数据库允许您分离缓存和 session 存储,当您需要删除所有缓存键(flushdb)但保留用户 session 时,它会很方便。您甚至可以为队列添加单独的连接。注意 it's not recommended要使用多个数据库,请改用多个 Redis 实例。

关于php - 在 Laravel 5 应用程序中将 Redis 配置为缓存接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56743790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com