记 egg-redis 无法启动的问题
最近在使用 egg 的过程中碰到一个问题,使用 egg-redis 插件却连不上 redis,导致启动一直失败,排除了密码错误,redis 服务没打开。这让我把目光投在 egg 和 egg-redis 的上面。
egg config 加载顺序
我是在 egg 的 config.default.js
是配置了哨兵模式,config.local.js
中重新配置 redis 为单例模式。
我怀疑是 egg config 的加载顺序有问题,但是我分别在两个 config log 了一下,发现的确是先加载 default 再加载 local。
在 egg-redis 包里打 log
既然 config 加载顺序没错,那就看看 egg-redis 有没有生效,并且拿到了什么配置。于是我在 egg-redis 的模块里直接打 log。
log 的确是调用了,但是 config 的内容就不对了。config 除了单例的配置,还包含了 default 中的哨兵配置,而 egg-redis 中的判断是这样的
1 |
|
最后的 else
才是进入单例的。
告破
这个问题,其实是 egg 和 egg-reids 共同导致的。
egg 的 config 加载机制,就很像 lodash 的 merge,导致哨兵模式并没有被单例覆盖。而 egg-redis 又是优先使用哨兵。
解决方案很简单,只要把哨兵的配置在 local 中配置为null
。
记 egg-redis 无法启动的问题
https://bubao.github.io/posts/d77eae53.html