◆

Redis 安装、启动与停止详解

2024-06-27 07:020

本地开发经常需要一个 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 可视化工具

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 和内存占用列也能顺手确认它有没有吃掉异常多的内存:

ps aux 命令输出中的 redis-server 进程信息,包含 PID、CPU 内存占用和监听地址端口

停止

用 shutdown 而不是 kill。区别在于 shutdown 是发给 Redis 的正常命令,它会先把内存里的数据按持久化配置刷到磁盘再退出;直接 kill -9 是强制终止,上次快照之后的写入全丢:

redis-cli shutdown

shutdown 默认会保存(如果配了 RDB),想明确控制加参数:shutdown save 强制保存,shutdown nosave 明确不保存。开发环境数据无所谓的话 nosave 停得更快。

用配置文件启动且开了 daemonize 的话,进程在后台,shutdown 是唯一优雅的停法。Homebrew 装的用 brew services stop redis 更方便,它会连自启配置一起处理。

💬留言板0

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

PAGE LOAD / LIVERedis 安装、启动与停止详解加载中