问题描述:
本地开发时,用到 redis,一个页面通过 redis 存储数据,另一个页面读取 redis 数据,但是一直读取不到,又不报错?
一句话总结下这个问题:
就是 redis 无法跨页面使用,又不报错。
问题根源:
调试发现,是配置文件内,把 redis 客户端参数配置为 mock,所以在使用 redis 时没有真正触发 predis,所以不报错。
普及一下 redis 客户端,php 的 redis 客户端有多个,官方推荐的主要有二个:Predis,phpredis。Predis 是PHP编写的,phpredis 是 c 语言写的 PHP 扩展,phpredis 性能上略胜于 Predis,性能上不必太关注,常见的业务量和计算机的运行能力可以排队对性能的担忧。
关于 laravel 内 redis 配置,涉及到的文件如下:
.env
REDIS_CLIENT=predis
......
......
REDIS_HOST=localhost
REDIS_PASSWORD=null
REDIS_PORT=6379
我就是因为把 predis 配置为 mock,所以才发生了跨页面访问不到数据的问题。
database.php
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'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'),
],
'redis-admin' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST_FINAL', 'redis-admin'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', '0'),
],
]
注意 client 的配置,client 是 redis 客户端配置,如果 .env 文件内没有配置 REDIS_CLIENT,这里默认 phpredis 就会生效。
这里可以配置多个 redis 服务,可以根据自己的业务进行不同配置。
cache.php
'stores' => [
......
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
],
这里的 connection 是用来指定默认 redis 服务,这里指定的是 default,default 可以改为其他的配置。 因为 redis 可以配置多个,使用时若不指定连接哪个 redis 服务,默认就是按这个配置连接的。
如果想连接其他 redis 服务,如下:
$redis = Redis::connection('redis-admin'); $redis->set('foo','bar'); echo $redis->get('foo');
在本地开发的 Laravel 应用中,遇到一个现象:使用 Redis 存储的数据无法在不同页面间共享,且无错误提示。问题源于配置文件中将 Redis 客户端设置为了 mock 模式,导致未实际调用 predis,从而无法正常读取数据。解决方法是确保 .env 和 database.php 中的 Redis 配置正确,避免使用 mock 客户端。Laravel 的 Redis 配置涉及 .env、database.php 和 cache.php 文件,要特别注意 client 配置和 connection 的设置,以确保正确连接和使用 Redis 服务。
1052

被折叠的 条评论
为什么被折叠?



