Homebrew:如何删除 redis/4.0.2 并使用 redis@3.2 作为我的默认 redis

Jul*_*oro 2 homebrew redis

我在安装了 redis/3.0.3 的情况下开始了这个任务,并希望将我的本地开发 redis 升级到版本 3.2.3,这就是我们在生产中运行的版本。我最终运行了brew upgrade redis,它安装了 redis 4.0.2,比我想要的版本早。然后我发现可以安装brew install redis@3.23.2.x。另外,在尝试清理 4.0.2 时,它只清理了 3.0.3。

现在我陷入了 Homebrew 不允许我卸载 redis/4.0.2 的情况,并将 redis@3.2 视为单独的 Homebrew Formula 。

$ brew switch redis 3.2
Error: redis does not have a version "3.2" in the Cellar.
Versions available: 4.0.2
Run Code Online (Sandbox Code Playgroud)

看看在地窖中它们如何显示为单独的公式:

$ ls  /usr/local/Cellar/ | grep redis  
redis
redis@3.2
Run Code Online (Sandbox Code Playgroud)

删除 redis/4.0.2 并使用 redis@3.2 作为我的默认 redis 的正确“自制”方法是什么,以便命令改为redis-server引用redis-cli3.2?我正在运行 Mac OS X Yosemite 10.10.5 和 Homebrew 1.3.4。

$ ls -l /usr/local/bin/ | grep redis
lrwxr-xr-x  1 jsoro  wheel        41 Oct  5 12:51 redis-benchmark -> ../Cellar/redis/4.0.2/bin/redis-benchmark
lrwxr-xr-x  1 jsoro  wheel        41 Oct  5 12:51 redis-check-aof -> ../Cellar/redis/4.0.2/bin/redis-check-aof
lrwxr-xr-x  1 jsoro  wheel        41 Oct  5 12:51 redis-check-rdb -> ../Cellar/redis/4.0.2/bin/redis-check-rdb
lrwxr-xr-x  1 jsoro  wheel        35 Oct  5 12:51 redis-cli -> ../Cellar/redis/4.0.2/bin/redis-cli
lrwxr-xr-x  1 jsoro  wheel        40 Oct  5 12:51 redis-sentinel -> ../Cellar/redis/4.0.2/bin/redis-sentinel
lrwxr-xr-x  1 jsoro  wheel        38 Oct  5 12:51 redis-server -> ../Cellar/redis/4.0.2/bin/redis-server
Run Code Online (Sandbox Code Playgroud)

Jul*_*oro 9

这个问题很简单,如果 Brew 文档/常见问题解答更清晰的话,问题可能会更容易。Brew常见问题解答说卸载是由 处理的brew cleanup <formula>,这就是导致我的 redis/3.0.3 被删除的原因。但是,brew cleanup不会删除 redis/4.0.2。为了删除它,我使用了它brew uninstall,但我在文档中找不到它......

$ brew uninstall redis
Uninstalling /usr/local/Cellar/redis/4.0.2... (11 files, 2.7MB)
Run Code Online (Sandbox Code Playgroud)

然后,为了解决 redis@3.2 未在 下符号链接的剩余问题/usr/local/bin/,我首先尝试卸载/重新安装 redis@3.2 以查看 Homebrew 是否会处理它......

$ ls -l /usr/local/bin/ | grep redis
$ brew uninstall redis@3.2
Uninstalling /usr/local/Cellar/redis@3.2/3.2.11... (11 files, 1.7MB)
$ brew install redis@3.2
==> Downloading http://download.redis.io/releases/redis-3.2.11.tar.gz
## TRIMMED ##
==> Summary
  /usr/local/Cellar/redis@3.2/3.2.11: 11 files, 1.7MB, built in 10 seconds
Run Code Online (Sandbox Code Playgroud)

当然,这并没有创建符号链接——实际上,我从输出中删除的“警告”部分明确地说明了这一点并提出了建议。我没有使用他们的建议,而是选择手动创建符号链接:

$ cd /usr/local/bin/
$ ls -l | grep redis
$
$ ln -s /usr/local/Cellar/redis\@3.2/3.2.11/bin/redis-check-aof redis-check-aof
$ ln -s /usr/local/Cellar/redis\@3.2/3.2.11/bin/redis-check-rdb redis-check-rdb
$ ln -s /usr/local/Cellar/redis\@3.2/3.2.11/bin/redis-cli redis-cli
$ ln -s /usr/local/Cellar/redis\@3.2/3.2.11/bin/redis-sentinel redis-sentinel
$ ln -s /usr/local/Cellar/redis\@3.2/3.2.11/bin/redis-server redis-server
$ ls -l | grep redis
lrwxr-xr-x  1 jsoro  wheel        54 Oct  5 14:27 redis-check-aof -> /usr/local/Cellar/redis@3.2/3.2.11/bin/redis-check-aof
lrwxr-xr-x  1 jsoro  wheel        54 Oct  5 14:27 redis-check-rdb -> /usr/local/Cellar/redis@3.2/3.2.11/bin/redis-check-rdb
lrwxr-xr-x  1 jsoro  wheel        48 Oct  5 14:27 redis-cli -> /usr/local/Cellar/redis@3.2/3.2.11/bin/redis-cli
lrwxr-xr-x  1 jsoro  wheel        53 Oct  5 14:27 redis-sentinel -> /usr/local/Cellar/redis@3.2/3.2.11/bin/redis-sentinel
lrwxr-xr-x  1 jsoro  wheel        51 Oct  5 14:26 redis-server -> /usr/local/Cellar/redis@3.2/3.2.11/bin/redis-server
Run Code Online (Sandbox Code Playgroud)

最后要注意的是,由于我在 redis/4.0.2 版本下运行了 redis-server,所以 dump.rdb 文件不再兼容。在 4.x dump.rdb 上使用 redis 3.2.x运行 redis-server会导致服务器立即退出。

$ redis-server
## TRIMMED ##
38504:M 05 Oct 14:29:07.234 # Server started, Redis version 3.2.11
38504:M 05 Oct 14:29:07.259 # Can't handle RDB format version 8
38504:M 05 Oct 14:29:07.260 # Fatal error loading the DB: Invalid argument. Exiting.
Run Code Online (Sandbox Code Playgroud)

不幸的是,您需要rm dump.rdb删除/重命名 dump.rdb 文件,以便让 redis-server 再次启动。