在Nextcloud中运行Redis的挣扎
大家好,我是无能。
在Ubuntu 20.04上设置Nextcloud21.0.1+Nginx+PHP+MariaDB+Redis
按照我之前安装Nextcloud时参考的这篇文章进行操作,但在我的环境下Redis未能正常运行。
即使不运行,它也能正常工作,所以不做也没关系...
我一直很困惑,所以这是解决方案篇。
另外,由于我在Nginx中设置了代理缓存,所以我想知道它们之间有什么区别?我让ChatGPT给我解释了一下。点击下面的按钮即可查看。
#myText { display: none; } #toggleButton:checked ~ #myText { display: block; }
显示说明
Nginx代理缓存内置于Web服务器(Nginx)本身。
它作为反向代理工作,缓存对应用服务器的请求并返回响应。
主要用于缓存Web内容(如HTML、图像、CSS、JavaScript等)。
加速静态文件分发,减轻服务器负载。
Nginx代理缓存可以通过Nginx配置文件轻松管理和控制。
可以设置缓存的有效期、大小、缓存目标URL等。
Nginx代理缓存在一个Nginx服务器内运行,为了实现可扩展性和高可用性,需要Nginx集群或复制等技术。
它在磁盘上保存临时缓存文件,但不提供长期数据持久性或耐久性功能。
Redis是一个独立的数据库和缓存平台。
它在另一个服务器上运行,应用程序连接到Redis来读写缓存数据。
它是一个通用的缓存平台,可以缓存各种数据。
可缓存的数据类型包括字符串、列表、集合、有序集合、哈希等。
Redis直接由程序控制和管理。
使用Redis命令来操作缓存数据,例如设置、获取、删除数据以及设置过期时间。
问题点
首先,Redis根本没有运行。
最终安装的软件包
Redis , Redis-server , Redis-tools , php-fpm
尝试启动Redis时
sudo service redis-server start
出现的错误
其一
Reading the configuration file, at line 1
>>> 'logfile "/var/log/redis/redis.log"'
Can't open the log file: No such file or directory
解决 : 提示无法访问redis.conf中设置的日志文件!
即使不指定日志文件,它似乎也会自动创建,所以我将其设置为空字符串""。如果确实需要,设置好日志文件、权限和许可应该就能正常运行。
其二
# Opening port: bind: Address already in use
解决 : 提示该端口已被占用!
redis.conf中默认设置的端口是6379。不知为何,在Devuan(OpenRC)中,即使执行sudo service redis-server stop也会报错且无法停止。因此,为了确认是哪个进程占用了端口,输入以下命令:
root@hoge:~# lsof -i :6379
如果有在后台运行的Redis进程,就找到了。确认PID并将其杀死。
root@hoge:~# kill -9 <PID>
之后应该就能正常启动了。
其三
*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 135
>>> 'slave-serve-stale-data yes'
Bad directive or wrong number of arguments
解决 : 我发现这种情况大多是由于Redis版本与redis.conf文件中的配置版本不一致引起的。
从Redis官网选择与自己版本相符的配置,然后全部复制粘贴过来吧。
其四
Failed opening the RDB file dump.rdb (in server root dir /) for saving: Permission denied
6232:M 07 Jul 2023 03:56:39.182 # Background saving error
解决 : 提示无法打开dump.rdb文件。
类似的情况是,如果存在旧的RDB文件,Redis启动后可能会中途崩溃。我最初以为是内存问题,但事实并非如此。
这种情况发生在我启动Redis后,更改了redis.conf中缓存目录Dir */~的设置。
即使更改了缓存目录,它似乎仍然尝试读取旧文件,所以我们强制删除它。我的文件在/var/lib/redis/dump.rdb。
sudo rm /var/lib/redis/dump.rdb
这样Redis方面的问题就解决了。
Nextcloud方面
root@hoge:~# sudo -u www-data php /var/www/html/nextcloud/occ maintenance:update:htaccess
更新htaccess时需要执行的操作。
RedisException: Connection refused in /var/www/html/nextcloud/lib/private/RedisFactory.php:137
~~~~~
解决 : 如果出现带有文件名的大量后续错误,那是因为Redis本身没有正常运行,或者Nextcloud的配置有误,导致无法连接到Redis。
主要检查Redis和Nextcloud的php.config。
我觉得可能还有其他问题,但大概就是这些了。
这样一来,以后处理Redis就不用担心了。
话说,如果叠加内存缓存,速度反而会变慢吗?我有点这么想,不知道是不是这样。如果速度达到一定程度,瓶颈可能就会变成通信中的服务器或终端的响应速度了。
还有很多未探索的领域,我很期待。
我已经筋疲力尽了。
那么。