为什么使用Redis?有什么好处?
你在使用Flarum发布回复时是否遇到过转圈等待过久的问题?
这可能是因为后台同时在发送邮件。
实际上,在你按下发送按钮的后,后台会依照用户的设置给关注此主题,订阅这个标签的用户发送通知,浏览器推送,或者邮件。在默认情况下,这些jobs是与发帖是同时进行的,其中尤其以发送邮件耗时最长,因此你就遇到了一直转圈的问题。
解决问题的做法就是让这些jobs在帖子发出后异步进行,而若是同时有大量的人发帖,就需要一个Queue(队列)来知道谁先谁后,Redis Queues就是这样的功能。
Redis Sessions则是把原本存储在文件中的会话记录(你保持的登录状态)转移到redis这个持久化数据库中。
Redis Cahce没有多大效果,“得益于”Flarum目前的设计。
安装与配置
使用Redis有两种选择,一种是安装GB Redis Setup插件,另一种是安装blomstra/flarum-redis 而后修改extend.php文件。
比较推荐的是前者,可以很简单方便的完成设置,毋须修改文件,当然其实前者也会安装blomstra/flarum-redis 以实现redis功能。
###一、前置步骤
REDIS_HOST=172.0.17.1 # Required
REDIS_PORT=6379 # Optional, else uses default
REDIS_PASSWORD=null # Required, can be an empty string
REDIS_DATABASE_CACHE=1 # Optional, else uses default
REDIS_DATABASE_QUEUE=2 # Optional, else uses default
REDIS_DATABASE_SESSION=3 # Optional, else uses default
3.在后台启用此插件GB Redis Setup,按需开启Sessions, Cache Queues
- 方案二:安装blomstra/flarum-redis并修改extend.php
1.安装blomstra/flarum-redis
composer require blomstra/flarum-redis
2.修改extend.php
把原本的
return [
];
更改成
return [
new Blomstra\Redis\Extend\Redis([
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
])
];
一些其他的配置写法
关掉部分服务
return [
(new Blomstra\Redis\Extend\Redis([
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
]))->disable(['cache', 'queue'])
];
分配不同数据库给sessions, cache, queues
return [
(new Blomstra\Redis\Extend\Redis([
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 1,
]))
->useDatabaseWith('cache', 1)
->useDatabaseWith('queue', 2)
->useDatabaseWith('session', 3)
];
完全分离的配置
return [
(new Blomstra\Redis\Extend\Redis([
'connections' => [
'cache' => [
'host' => 'cache.int.yoursite.com',
'password' => 'foo-bar',
'port' => 6379,
'database' => 1,
],
'queue' => [
'host' => 'queue.int.yoursite.com',
'password' => 'foo-bar',
'port' => 6379,
'database' => 1,
],
'session' => [
'host' => 'session.int.yoursite.com',
'password' => 'foo-bar',
'port' => 6379,
'database' => 1,
],
],
]))
];
注意,使用方案一配置redis时不要再去修改extend.php。
二、保持队列后台进行
在flarum根目录下执行
php flarum queue:work
需要保持该进程在后台进行,你可以使用Supervisor或者nohup保活。
若你在配置redis后出现无法收到通知的情况时,请检查该进程是否存活。
三、使用Laravel Horizon查看Redis Queue队列执行情况(可选)
1.安装Horizon
composer require blomstra/horizon
2.Horizon进程守护
php flarum horizon
同上方法保持该进程后台运行。
3.开启该插件,访问https://your.flarum/admin/horizon 查看面板
在这里可以看到完成的,等待的jobs