官方文档:https://redis.io/docs/getting-started/installation/install-redis-from-source/
开源地址:https://github.com/redis/redis
一、redis概念
Redis 是一个开源的内存数据结构存储系统,通常用作数据库、缓存和消息队列。它支持多种数据结构,包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和有序集合(sorted sets)。Redis 的操作是基于内存的,具有非常高的性能,因此常用于需要快速访问和处理数据的场景。
Redis 还支持持久化,可以将内存中的数据异步地保存到硬盘中,防止数据丢失。它还提供了丰富的功能,如发布/订阅(Pub/Sub)、事务(Transactions)、Lua 脚本、键过期和 LRU(最近最少使用)驱逐策略等。
由于 Redis 是单线程的,它在处理单个请求时性能非常高,而且通过将任务划分到多个 Redis 实例中,可以水平扩展 Redis 的处理能力。Redis 常用于高速缓存、实时分析、会话管理、消息队列等场景。
二、安装redis
这里以下载 redis 7.4.0 为例。
1.下载并解压redis安装包
安装依赖项:
yum install -y wget gcc
下载redis源码包并解压:
cd /usr/local/src
wget
wget https://github.com/redis/redis/archive/refs/tags/7.4.0.tar.gz
tar -xzf 7.4.0.tar.gz
cd redis-7.4.0
也可以官网安装:
wget https://download.redis.io/redis-stable.tar.gz
2.编译并安装redis
通过运行 make
来编译 Redis:
make -j${nproc}
如果编译成功,会在 src
目录中显示很多 Redis 二进制文件,包括:
-
redis-server
:指 Redis 服务器本身。 -
redis-cli
:是与 Redis 对话的命令行界面实用程序。
安装 Redis,并指定安装在 /usr/local/redis
目录路径下:
make install PREFIX=/usr/local/redis
3.验证redis版本
进入 redis 安装目录,目录下只有一个 bin
目录,进入该目录,检查 redis 版本验证:
cd /usr/local/redis/bin
# 查看可执行文件
ll
# 列出文件信息
-rwxr-xr-x. 1 root root 6819344 Aug 24 01:10 redis-benchmark
lrwxrwxrwx. 1 root root 12 Aug 24 01:10 redis-check-aof -> redis-server
lrwxrwxrwx. 1 root root 12 Aug 24 01:10 redis-check-rdb -> redis-server
-rwxr-xr-x. 1 root root 7800928 Aug 24 01:10 redis-cli
lrwxrwxrwx. 1 root root 12 Aug 24 01:10 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 16176656 Aug 24 01:10 redis-server
# 验证redis版本
./redis-server --version
# 显示版本信息
Redis server v=7.4.0 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=d523d183f220da8d
三、配置redis
1.创建redis数据目录
在 redis 安装目录下,创建所需的数据目录:
cd /usr/local/redis
mkdir {logs,data,conf}
2.复制redis配置文件
将 redis 源码包目录下的 redis.conf
配置文件复制到 redis 安装目录下的 conf
数据目录中:
cp -f /usr/local/src/redis-7.4.0/redis.conf /usr/local/redis/conf
3.修改redis配置文件
进入 /usr/local/redis/conf
目录,编辑 redis.conf
配置文件,修改以下内容:
cd /usr/local/redis/conf
# 修改以下内容
sed -i "s@daemonize no@daemonize yes@g" redis.conf
sed -i "s@bind 127.0.0.1 -::1@bind 0.0.0.0@g" redis.conf
sed -i "s@protected-mode yes@protected-mode no@g" redis.conf
sed -i "s@logfile \"\"@logfile \"/usr/local/redis/logs/redis.log\"@g" redis.conf
sed -i "s@dir ./@dir /usr/local/redis/data@g" redis.conf
sed -i "s@# requirepass foobared@requirepass redis2025@g" redis.conf
解释说明:
daemonize yes
:修改为以守护进程模式运行,即 Redis 会在后台运行,允许终端关闭而 Redis 仍然继续运行。
protected-mode no
:禁用 Redis 的保护模式,允许外部连接(确保启用安全措施如密码认证)。
logfile /usr/local/redis/log/redis.log
:指定 Redis 日志文件的位置,将日志写入到指定的文件路径。
dir /usr/local/redis/data
:设置 Redis 数据目录。
requirepass redis2025
:设置 Redis 密码,所有连接到 Redis 的客户端都需要提供这个密码进行身份验证。
文件内容太多,可以过滤掉一些注释后进行查看:
egrep "^daemonize|^bind|^protected|^logfile|^dir|^requirepass" redis.conf
# 显示匹配信息
bind 0.0.0.0
protected-mode no
daemonize yes
logfile "/usr/local/redis/logs/redis.log"
dir /usr/local/redis/data
requirepass redis2025
4.创建redis软链接
将 redis 安装目录的 bin
目录下的可执行文件 redis-server
和 redis-cli
创建符号连接:
ln -s /usr/local/redis/bin/redis-server /usr/bin/redis-server
ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis-cli
解释说明:
redis-server
是 Redis 数据库的主要服务进程。启动该程序会启动 Redis 服务器实例,它会监听客户端请求并处理数据存储和检索操作。redis-cli
是 Redis 的命令行客户端工具,用于与 Redis 服务器进行交互。它允许用户通过命令行发送命令到 Redis 服务器,并查看结果。
5.临时启动redis服务
在前台临时启动和停止 Redis,直接执行以下命令:
redis-server
如果成功,会看到 Redis 的启动日志,并且 Redis 将在前台运行。要停止 Redis,请输入Ctrl-C。
6.配置启动服务
创建一个名为 redis.service
的 systemd 服务单元文件,用于管理 redis 服务,存放于/etc/systemd/system
目录下,并添加以下内容:
cat > /etc/systemd/system/redis.service <<'EOF'
[Unit]
Description=redis-7.4.0
After=network.target
[Service]
User=root
Group=root
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
服务单元文件配置详解:
[Unit] 部分:
- Description:描述了服务的简短描述信息。
- After:指定该服务应该在
network.target
之后启动,也就是在网络服务启动之后启动 Redis 服务。这确保了 Redis 在系统的网络功能可用之后启动。[Service] 部分:
User:指定以
root
用户身份运行该服务。Group:指定以
root
用户组身份运行该服务。Type:表示服务管理器是系统 init 的子进程,用于管理需要后台运行的服务。(本条配置必选)
ExecStart:该指令定义了服务启动时执行的命令。它运行 Redis 服务器,使用配置文件
/etc/redis.conf
。ExecStop:停止服务的命令,这里是
/bin/kill -s TERM $MAINPID
,发送 QUIT 信号给主进程。
/bin/kill
:这是用来发送信号到进程的命令。kill
命令用于向指定的进程发送信号,可以用来终止进程、重启进程等。-s TERM
:指定要发送的信号类型。TERM
代表SIGTERM
(终止信号),这是一个请求程序优雅地终止的信号。进程可以处理SIGTERM
信号并进行清理操作,然后正常退出。$MAINPID
:这是一个特殊的变量,代表服务主进程的进程 ID(PID)。在 systemd 中,$MAINPID
是系统自动填充的变量,指代由服务启动的主进程的 PID。PrivateTmp:这是一个安全选项,如果设置为
true
,则此服务将有一个独立的临时目录,与其他服务和用户隔离。[Install] 部分:
- WantedBy:定义该服务的目标,此处为
multi-user.target
,表示该服务应该在多用户模式下启动(相当于系统启动后的默认运行级别)。
7.启动redis服务
systemctl start redis #启动 Redis
systemctl enable redis #启用 Redis 开机自启
systemctl status redis #检查 Redis 服务状态
systemctl restart redis #重启服务
启动如出现报错,使用以下命令查看具体报错:
journalctl -u redis -b
-u redis
:限定只显示与redis
服务相关的日志条目。redis
是服务名,和redis.service
一样,指定要查看的服务。
-b
:限定只显示当前引导(boot)周期内的日志,即从系统最近一次启动之后产生的日志。
四、测试redis客户端连接
可以使用 redis-cli
作为 Redis 客户端来连接到 Redis 服务器。以下是几种常见的连接方式:
1.本地连接
如果 Redis 服务器和客户端在同一台机器上运行,可以使用默认的本地连接:
redis-cli
这将默认连接到
localhost
(127.0.0.1)上的 Redis 服务器,默认端口是 6379。docker部署的需要先进入docker容器内再执行。
2.指定 IP 地址和端口
如果 Redis 服务器在远程主机上,或者你需要指定端口,可以使用以下命令:
redis-cli -h <IP地址> -p <端口>
-h
:指定 Redis 服务器的 IP 地址(本地使用localhost
或127.0.0.1
)。-p
:指定 Redis 服务器的端口,默认是 6379。
示例:
redis-cli -h 10.22.51.64 -p 6379
3.带密码连接
如果 Redis 服务器启用了密码验证,你需要使用 -a
选项来提供密码:
redis-cli -h <IP地址> -p <端口> -a <密码>
示例:
redis-cli -h 10.22.51.64 -p 6379 -a "123"
4.通过 Unix Socket 连接
如果 Redis 服务器通过 Unix 套接字提供服务,你可以通过套接字文件来连接:
redis-cli -s /path/to/redis.sock
示例:
redis-cli -s /var/run/redis/redis.sock
5.集群模式连接
如果你使用 Redis 集群,使用 redis-cli
的集群模式(带 -c
选项)进行连接:
redis-cli -c -h <IP地址> -p <端口>
示例:
redis-cli -c -h 10.22.51.64 -p 6381
6.测试连接
连接 Redis 后,你可以通过以下命令测试连接是否正常:
ping
如果连接成功,Redis 将返回 PONG
。
五、注意事项
redis 服务使用 netstat
命令无法查看到进程,可执行以下命令查看:
[root@localhost /root]# ps aux | grep redis
root 19821 0.7 0.1 241572 8800 ? Ssl 02:28 0:03 /usr/local/redis/bin/redis-server 0.0.0.0:6379
六、扩展内容
-
Redis高可用部署:介绍Redis Sentinel和Redis Cluster两种常见的高可用部署方案,以保证Redis的可靠性和容错性。
-
Redis持久化配置:详细介绍Redis的持久化机制,包括RDB快照和AOF日志,以及如何根据实际需求进行配置。
-
Redis性能优化:提供一些常见的Redis性能优化技巧,包括使用连接池、合理设置过期时间、优化数据结构等。
-
Redis应用场景:介绍Redis在缓存、队列、实时分析等场景中的应用,并提供相应的最佳实践和示例代码。
-
Redis安全配置:讲解如何保护Redis的安全,包括密码认证、网络访问控制等方面的配置。