Appearance
02|安装与连接
上一篇认识了 Redis。这一篇把它装起来、连上去、让命令能跑。
装机这事本身不复杂,但有几处容易卡住:装完默认监听只在本地、配置改了启动不起来、systemd 管理进程的方式和想象不同。本篇把这些节点讲清楚。密码认证、内存淘汰这些放到后面专门讲,这里先把"装好能连"走通。
一、装之前先确认要哪个
上一篇说过,Redis 和 Valkey 命令基本通用,但二进制名和包名不同。云环境或想要开源版本的装 Valkey,存量项目用 Redis 的继续装 Redis。本篇以 Redis 为例,命令几乎一一对应到 Valkey(redis-server 换 valkey-server,redis-cli 换 valkey-cli)。
两种安装方式,按场景选:
| 方式 | 适用 | 特点 |
|---|---|---|
| 系统包 | 测试、快速试用 | 一条命令装好,版本受发行版限制 |
| 源码编译 | 生产、要固定版本 | 版本自选、参数可控、路径统一 |
生产推荐源码编译——版本固定、路径统一,不依赖系统的 Redis 版本节奏。
二、系统包安装
最快的先手:
bash
# RHEL / Rocky
yum install -y redis
systemctl enable --now redis
# Debian / Ubuntu(注意:Debian/Ubuntu 较新版本默认包名可能是 valkey)
apt update
apt install -y redis-server
systemctl enable --now redis-server装完确认版本和进程:
bash
redis-server --version
redis-cli ping
# PONGredis-cli ping 返回 PONG 就说明实例起来了、能连上。这是后面所有连接检查的第一步。
包安装的文件散落在系统各处,关键路径:
| 路径 | 内容 |
|---|---|
/etc/redis/redis.conf 或 /etc/redis.conf | 配置文件 |
/var/lib/redis | 数据目录 |
/var/log/redis | 日志 |
具体用 rpm -ql redis(RHEL)或 dpkg -L redis-server(Debian)查全部文件位置。
三、源码编译安装
生产环境要固定版本和路径,用源码编译。先装编译依赖:
bash
# RHEL / Rocky
yum install -y gcc make tcl
# Debian / Ubuntu
apt install -y build-essential tcl下载、解压、编译:
bash
cd /usr/local/src
curl -O https://download.redis.io/releases/redis-7.4.x.tar.gz
tar -xf redis-7.4.x.tar.gz
cd redis-7.4.x
make -j$(nproc) # 并行编译,加快速度
make install PREFIX=/usr/local/redis # 装到指定目录tcl 是为了跑 make test(可选的测试),不装也能编译。
创建运行用户和数据目录——Redis 进程以这个用户身份跑,不需要人登录:
bash
groupadd redis
useradd -r -g redis -s /sbin/nologin redis
mkdir -p /data/redis/{data,logs,tmp}
chown -R redis:redis /data/redis数据目录分三块:data 放 RDB/AOF 文件、logs 放日志、tmp 放 pid 和 socket。分开管理方便备份和排查。
四、最小配置文件
源码编译后没有现成配置文件,自己写一个。最小可用版本:
ini
# /etc/redis/redis.conf
bind 127.0.0.1 10.0.0.5 # 监听本机和内网,不要写 0.0.0.0 暴露公网
port 6379
protected-mode yes # 保护模式:没设密码时不允许外网访问
daemonize no # systemd 管理时设 no,让 systemd 接管
pidfile /data/redis/tmp/redis.pid
logfile /data/redis/logs/redis.log
dir /data/redis/data # RDB/AOF 存放目录
maxmemory 2gb # 内存上限,超出按淘汰策略处理
maxmemory-policy noeviction # 淘汰策略,noeviction 表示满了直接报错几个容易踩的点:
bind 不要写 0.0.0.0——把 Redis 暴露到公网是高危行为,Redis 历史上有过多起因暴露被植入勒索程序的事。绑本机和内网 IP 就够。
daemonize no 配合 systemd——很多人第一反应是设 daemonize yes 让进程后台跑,但用 systemd 管理时要设 no:systemd 自己负责守护进程,Redis 设成前台运行 systemd 才能正确跟踪它的状态。
maxmemory 生产必须设——不设的话 Redis 会一直吃内存直到系统 OOM。noeviction 是最稳的默认(满了报错而不是删数据),淘汰策略下一篇章专门讲。
五、用 systemd 管理
systemd unit 文件:
ini
# /etc/systemd/system/redis.service
[Unit]
Description=Redis Server
After=network.target
[Service]
Type=notify # 配合 daemonize no,Redis 用 sd_notify 通知就绪
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis.conf --supervised systemd
ExecStop=/usr/local/redis/bin/redis-cli shutdown
Restart=on-failure
LimitNOFILE=65535
[Install]
WantedBy=multi-user.targetType=notify 和配置里 --supervised systemd 配套——Redis 启动好后主动通知 systemd,systemd 才认为服务起来了,而不是靠猜进程在不在。
启动并验证:
bash
systemctl daemon-reload
systemctl enable --now redis
systemctl status redis --no-pager
redis-cli ping
# PONG六、用 redis-cli 连接和操作
redis-cli 是 Redis 自带的命令行客户端,连上后能交互式敲命令:
bash
redis-cli
127.0.0.1:6379> SET hello world
OK
127.0.0.1:6379> GET hello
"world"
127.0.0.1:6379> DEL hello
(integer) 1
127.0.0.1:6379> EXIT也可以一条命令执行后退出,适合脚本:
bash
redis-cli SET hello world
redis-cli GET hello
# world连远程或带端口的实例:
bash
redis-cli -h 10.0.0.5 -p 6379设了密码后加 -a(但密码会出现在命令行历史,生产环境用 --askpass 或配置文件更安全):
bash
redis-cli -h 10.0.0.5 -a 'yourpassword'七、启动后的检查清单
新装实例,跑几条命令确认状态健康:
bash
# 服务的版本和基本信息
redis-cli INFO server | head -20
# 内存使用情况
redis-cli INFO memory | grep used_memory_human
# 连接数
redis-cli INFO clients | grep connected_clients
# 数据量
redis-cli DBSIZEINFO server 看版本、启动时间、进程 ID;INFO memory 看用了多少内存、吃了多少碎片;INFO clients 看当前连接数;DBSIZE 看有多少个 key。这四条是日常巡检的起点,后面的监控运维篇会展开。
八、装不起来的几个常见原因
端口被占用:bind on TCP port failed 说明 6379 被占了。ss -lntp | grep 6379 看是谁占的。
目录权限不对:pidfile 和 dir 指向的目录 redis 用户没权限写。ls -ld /data/redis/* 和 journalctl -u redis 一起看。
配置参数不认:日志里 unknown directive 说明写了新版本才有的参数,或拼错了参数名。改回标准参数名。
连接被拒绝:Could not connect to Redis at 127.0.0.1:6379: Connection refused——实例没启动,或 bind 的地址不对。先 systemctl status redis 看进程在不在。
装好之后
Redis 跑起来了,能连能存能取。下一篇开始讲数据类型——Redis 最核心的内容。先从最基础的 string 和键空间操作讲起,再扩展到 hash、list、set、zset。