php - Laravel 没有发布到 Redis
问题描述
我正在尝试在我的本地 RESTful API 中实现 Redis 发布,该 API 内置在 Laravel 中,以便稍后使用 Web Sockets 实现聊天系统。我打算稍后从 Node.JS 服务器读取它们。
我Redis::publish
用来向我的test-channel
.
但是,由于某种原因,Laravel 似乎没有发布到它。
我还注意到,当我调用 时Redis::set
,我设置的任何内容都不会保留在 Redis 中,但是使用Redis::get
我可以读取我正在设置的值。
public function redis(Request $request) {
$data = $request->validate([
'message' => 'string|required'
]);
Redis::publish('test-channel', 'a test message');
return 'Done';
}
我在api/redis
路线中使用上面的代码:
Route::post('/redis', 'API\MessageController@redis');
我已经订阅了test-channel
使用redis-cli
命令。如果我在终端实例中使用
手动将消息发布到,我会正确接收我正在发布的消息。但是,由于某种原因,它们似乎没有与 Laravel 一起发布。
在运行和访问上述路线时,
我可以注意到Laravel 记录以下内容:test-channel
redis-cli
php artisan serve
[*timestamp*] 127.0.0.1:39448 Accepted
[*timestamp*] 127.0.0.1:39448 Closing
之后的端口127.0.0.1
似乎是随机的。
我尝试了 php-redis php 扩展和 predis 包,只是为了确保它不是其中的任何一个,但我对它们都得到了相同的结果。我目前正在使用启用了 igbinary 和 redis 扩展的 php-redis,/etc/php/config.d
并已从config/app.php
.
我在 Manjaro 上使用 PHP 7.4、Laravel 6.0 和 Redis 5.0.7。
解决方案
去过那里,发现:
$ redis-client
psubscribe *
会告诉你发生了什么。
您的默认 config/database.php 可能包含以下内容:
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
在这种情况下,频道名称将带有此前缀选项的前缀。所以你可以评论这个选项,或者,如果你保留它,一定要订阅正确的频道
Redis::publish('test-channel', 'a test message');
$prefix = config('database.redis.options.prefix');
$channel = $prefix . 'test-channel';
return "Done. (published on $channel)";
推荐阅读
- python - Pygame,玩家在房间内与不同墙壁发生碰撞
- javascript - 用公式 javascript 计算
- elixir - 使用 ExUnit 检查状态代码失败,但实际 REST 测试成功
- c# - 在通用方法中返回接口继承的类
- reactjs - 框架或库的生命周期是什么?
- c# - Gremlin,如何获取帖子和所有评论以及评论上的嵌套评论有点像 reddit。在c#中
- c# - C# 字段初始值设定项错误
- image - 使用 docker build 输出信息
- go - 我正在使用 go 语言打印到 POS 打印机,但打印的中文字符不好。(英语还可以)
- javascript - 如何使用javascript删除适用于所有媒体查询的多个滑动标签中的额外空间?