Redis 安装、启动与停止详解
本地开发经常需要一个 Redis:做缓存、存 session、写队列,或者只是想验证一下某段代码的 Redis 操作对不对。这篇记录源码编译安装的流程。
要先说清楚为什么不直接用 brew install redis。Homebrew 装是最省事的,一条命令搞定,日常开发我也这么用。走源码编译的场景是:需要某个特定的旧版本(Homebrew 只提供最新版和有限的几个版本)、要改编译参数、或者机器上没有 Homebrew。另外 Redis 7.4 之后许可证变更,Homebrew 的 redis formula 停在了 7.2,需要更新版本或者想用完全开源的分支(Valkey)时也得自己编译。
安装
下载页
https://download.redis.io/releases/
这个页面列出了所有历史版本的源码包。文件名格式是 redis-<版本号>.tar.gz,挑一个稳定版下载——版本号第二位是偶数的是稳定版,奇数是开发版。
- 找到指定的版本下载
- 解压后重命名为
redis - 将目录移动到
/usr/local/
放到 /usr/local/ 是约定,这个目录用于手工安装的软件,和系统自带的区分开。重命名成 redis 是为了后面路径好写,不然带版本号的目录名换版本就得改所有引用。
sudo mv /Users/wfly/Downloads/redis /usr/local/
编译安装
# 进入到redis目录
cd /usr/local/redis
# 编译测试
sudo make test
# 安装
sudo make install
三条命令的作用:cd 进源码目录;make test 编译并跑一遍自带的测试套件,确认在当前环境下编译出来的东西是好的;make install 把编译产物(redis-server、redis-cli 这些可执行文件)复制到 /usr/local/bin,这样在任何目录都能直接调用。
make test 会跑几分钟,急的话可以只 sudo make 编译不测试。但第一次在新机器上装还是跑一遍稳妥,编译环境有问题的话测试会直接暴露出来,比装完了才发现某个功能不正常好。
编译需要 Xcode Command Line Tools(提供 make 和 gcc),没装的话执行 xcode-select --install。报 jemalloc 相关错误时用 make MALLOC=libc 绕过,macOS 上用系统的内存分配器就行。
启动redis服务。
不带参数启动时 Redis 用内置的默认配置:监听 6379 端口、前台运行、日志直接打在终端上。终端一关服务就停了:
redis-server
想后台运行、或者改端口密码这些,就得指定配置文件。源码目录里有个 redis.conf 模板,复制一份改完再启动:
redis-server /usr/local/redis/redis.conf
配置文件里几个值得改的:daemonize yes 后台运行;requirepass 你的密码 设访问密码;bind 127.0.0.1 只监听本机。最后这条很重要——Redis 默认配置在早期版本里是监听所有网卡且无密码的,公网上被扫到就是直接被入侵,历史上因此中招的服务器非常多。本地开发也养成只监听 127.0.0.1 的习惯。
redis 可视化工具
- 项目地址:https://github.com/qishibo/AnotherRedisDesktopManager/tree/master
- 下载地址: https://gitee.com/qishibo/AnotherRedisDesktopManager/releases
Another Redis Desktop Manager 是我用得最顺手的一个,开源免费、跨平台,对大 key 的处理比同类工具好(几十万成员的集合能分页加载而不是一次性拉完把自己卡死)。Gitee 那个下载地址是国内镜像,比 GitHub Releases 快得多。
用可视化工具主要是看数据结构和调试。redis-cli 敲命令快,但要浏览一堆 hash 的字段、看 zset 的排序,图形界面直观太多。它连接时和代码用的是同一套协议,看到的就是真实数据,不存在缓存不一致的问题。
macOS 上打开可能提示「已损坏」,那是 Gatekeeper 拦的,用 xattr -cr 清掉隔离属性就行。
查看是否安装过 redis
新机器上或者不确定之前装没装过,先确认一下,避免装两份互相干扰。
终端输入
redis-server --version
如果 Redis 已安装,您将看到 Redis 版本信息,例如:
Redis server v=6.2.1 sha=00000000:0 malloc=libc bits=64 build=f9d4a1421eb73e15
如果 Redis 未安装,您将看到一条错误消息,指出命令未找到:
-bash: redis-server: command not found
报 command not found 也有可能是装了但不在 PATH 里。ls /usr/local/bin | grep redis 看一下文件在不在,在的话就是 PATH 的问题。
启动、停止
启动
redis-server
查看是否启动
方法一
ping 是应用层的探测,它真的建了一条连接并发了个命令过去。返回 PONG 说明服务不仅进程活着,而且能正常响应请求——这比看进程存不存在更可靠,进程在但卡死的情况是有的:
redis-cli ping
# 如果 Redis 正在运行,您将收到以下回复 PONG
设了密码的话要带上:redis-cli -a 密码 ping。返回 NOAUTH Authentication required 就是没认证。
方法二
从进程层面确认,能顺带看到启动参数(用的哪个配置文件、监听什么端口)和资源占用:
ps aux | grep redis
结果如图所示
下图的输出里,重点看那行 redis-server 后面跟的地址和端口——*:6379 表示监听所有网卡,127.0.0.1:6379 表示只监听本机。前面的 PID 和内存占用列也能顺手确认它有没有吃掉异常多的内存:

停止
用 shutdown 而不是 kill。区别在于 shutdown 是发给 Redis 的正常命令,它会先把内存里的数据按持久化配置刷到磁盘再退出;直接 kill -9 是强制终止,上次快照之后的写入全丢:
redis-cli shutdown
shutdown 默认会保存(如果配了 RDB),想明确控制加参数:shutdown save 强制保存,shutdown nosave 明确不保存。开发环境数据无所谓的话 nosave 停得更快。
用配置文件启动且开了 daemonize 的话,进程在后台,shutdown 是唯一优雅的停法。Homebrew 装的用 brew services stop redis 更方便,它会连自启配置一起处理。

还没有留言,来发表第一条吧~