Ubuntu 20.04 安装 Redis

目录

[一、切换到 root 超级用户](#一、切换到 root 超级用户)

[二、搜索 Redis 相关的软件安装包](#二、搜索 Redis 相关的软件安装包)

[三、使用 apt 命令安装 Redis](#三、使用 apt 命令安装 Redis)

[四、检查 Redis 安装情况](#四、检查 Redis 安装情况)

五、修改Redis配置文件(修改两个地方)

[1、修改绑定地址 bind 0.0.0.0](#1、修改绑定地址 bind 0.0.0.0)

[2、关闭保护模式 protected-mode no](#2、关闭保护模式 protected-mode no)

六、重新启动Redis服务端

七、退出Redis客户端(两种方法)


一、切换到 root 超级用户

使用su命令切换到root超级用户:

bash 复制代码
su

此时我们已经切换到了root超级用户,但是工作目录还是在hmz用户的家目录中,即/home/hmz,此时我们必须要cd到root的家目录中进行工作,如下:

bash 复制代码
cd ~

二、搜索 Redis 相关的软件安装包

安装前,我们先了解安装的版本,可能以后会需要用到,比如更新版本之类的,方便记录和认识。我们首先搜索Redis相关的软件安装包:

bash 复制代码
apt search redis

上面红色方框的这个版本是功能比较全的,也是apt当前提供的稳定版本,即Redis 5.0.7版本,方框下面符合版本条件的都是这个版本所需的软件安装包(包括很多的文件,并不是只有这个,我们这里并不关心这些,只需知道所选版本就行),其中包括Redis的客户端和服务端等等一系列文件和包;若我们想安装7.0这个新的版本的话,就没办法通过apt这个软件安装包管理器来安装了,apt也不提供Redis最新版本的安装,这样会比较麻烦,没有必要,还是选择5.0.7版本就好了。

补充和扩展: 关于上面的问题版本的选择和安装的问题,它触及了Linux发行版软件包管理的一个核心设计哲学:稳定性优先 vs. 追求最新

核心原因:Ubuntu 的软件仓库策略

Ubuntu(以及绝大多数主流Linux发行版,如Debian、CentOS)的官方软件仓库(Repository)的首要目标是为系统提供一个稳定、可靠且兼容性经过充分测试的软件环境,而不是提供所有软件的最新版本。

冻结和测试

  • 当一个Ubuntu版本(例如20.04 LTS)发布时,其官方软件仓库中的大部分软件版本就会被"冻结"在一个特定的状态。

  • 在此之后,Ubuntu团队和安全团队只会为这些软件向后移植(Backport)安全补丁和关键的错误修复 ,而不会升级到新的主版本或次版本

  • 这样做是为了确保系统核心组件的API、配置文件和行为保持一致。如果随意升级,可能会引发依赖关系冲突,导致其他依赖于Redis的软件(如PHP扩展、Python库等)崩溃。

软件包命名规则:redis-server vs redis

  • 截图中红色方框下面的软件包名为 redis-server。这是Ubuntu官方打包并维护的Redis服务器软件包。

  • 它后面标注的 (如5.0.7-2build1) 是Ubuntu在Redis官方5.0.7源码基础上,打上了一些自己的构建和兼容性补丁后的版本号。

  • 它被标记为 all 是因为这个软件包是架构无关的,它包含的是配置文件和脚本,实际的二进制文件会在安装时根据你的系统架构(amd64, arm64等)从另一个依赖包中获取。

为什么新版本(如7.0)不在apt里?

  • Redis 7.0 是在使用的这个Ubuntu版本发布之后才问世的。根据上述的"稳定性优先"原则,Ubuntu官方仓库不会将其纳入常规更新。

  • 将一个新的大版本软件(如从5.0到7.0)加入到已发布的稳定版系统中,需要进行大量的测试工作,以确保它与系统中成千上万个其他软件包都能和平共处。这对于发行版维护者来说是一个巨大的工程,他们通常只对少数核心组件(如浏览器、内核)提供这样的更新通道。

  • **如何安装新版本的Redis(如果确实需要)?**有需要的同学可以上网查找资料,这里学习Redis使用5.0.7版本就完全足够了。安装7.0比较麻烦,没有必要,对于学习和测试环境来说,这是正确的。对于生产环境,使用经过充分测试的5.0.7通常是更稳妥的选择。


三、使用 apt 命令安装 Redis

bash 复制代码
#安装时询问
apt install redis
#或者
#安装时不询问,直接安装
apt install redis -y

输入y之后,等待Redis的安装(其中包括客户端和服务端等等一系列文件和包),安装完成如下:


四、检查 Redis 安装情况

我们可以通过下面的命令来查看是否安装成功并存在运行:

bash 复制代码
netstat -anp | grep redis

这个命令是一个经典的组合,用于检查Redis服务器进程的网络连接情况

命令分解:

netstat -anp

  • netstat:一个用于显示网络连接、路由表、接口统计等信息的命令行工具。

  • -a:显示所有连接和监听端口。

  • -n:以数字形式显示地址和端口号(不进行DNS解析和服务名称查找),这样更快、更准确。

  • -p:显示进程信息,即哪个程序在使用这个连接。

  • 作用:列出系统中所有活跃的网络连接及其对应的进程。

| :这是"管道"符。它将 netstat -anp 命令的输出结果 ,作为下一个命令 grep redis输入

grep redis

  • grep:一个强大的文本搜索工具。

  • redis:要搜索的关键词。

  • 作用 :从前面 netstat 输出的所有信息中,过滤出包含"redis"字样的行

整体作用与输出示例:

将这三部分组合起来,这个命令的目的就是:快速找出与Redis进程相关的所有网络连接

执行后,你可能会看到类似这样的输出:

整体概览: 我们来逐行分析这个 netstat 输出结果,这显示Redis服务器正在运行,并且只允许本地连接,拒绝了外部网络访问。

第一行:IPv4连接

  • tcp:使用TCP协议

  • 127.0.0.1:6379 :Redis服务监听在本地回环地址6379端口

  • 0.0.0.0:*:表示可以接受来自任何远程IP的连接(但受限于监听地址)

  • LISTEN:处于监听状态,等待连接

  • 4004565/redis-serve:进程ID为4004565,进程名是redis-server

关键点 :由于监听地址是127.0.0.1,只有本机上的应用程序可以连接这个Redis服务。

第二行:IPv6连接

  • tcp6:IPv6的TCP协议

  • ::1:6379::1是IPv6的本地回环地址(相当于IPv4的127.0.0.1)

  • :::*:IPv6的等效表示

  • 同一个进程:同样是进程4004565,说明同一个Redis实例同时监听IPv4和IPv6的本地地址

**安全配置分析:**这种配置表明:

  • 安全性较高:外部网络无法直接访问Redis

  • 仅限本机访问:只有同一台服务器上的应用可以连接

  • 无法远程管理:从其他机器无法连接到此Redis

  • 🔧 如需远程访问 :需要修改Redis配置文件,将bind参数设置为0.0.0.0或特定IP,并设置密码认证

这是一个标准的、安全的Redis默认安装配置,适合服务端应用与Redis在同一台机器上使用的场景。

常用场景:

  • 快速确认Redis服务是否已启动 :如果这个命令有输出(特别是包含LISTEN状态的行),就说明Redis服务正在运行。

  • 检查Redis监听的IP和端口 :确认Redis是只允许本地连接(127.0.0.1:6379)还是允许外部连接(0.0.0.0:6379)。

  • 查看有哪些客户端连接到了Redis :可能会看到很多ESTABLISHED状态的连接,后面跟着客户端的IP和端口。

现代替代命令: 需要注意的是,在许多新版本的Linux发行版中,netstat 已被认为"过时",推荐使用 ss 命令来替代,其功能和参数非常相似,而且更快。

等效的 ss 命令是:

bash 复制代码
ss -anp | grep redis

它的输出格式与 netstat 非常相似,可以完成同样的工作。如下:

6379端口:

  • Redis服务的默认端口,就像每个网络服务都有一个唯一的"门牌号"。

  • 类比:MySQL → 3306、HTTP → 80、HTTPS → 443、SSH → 22、Redis → 6379

  • 当客户端要连接Redis服务器时,默认就是通过6379端口来访问的。

  • 可以在Redis配置文件中修改这个端口号,但通常保持默认。

127.0.0.1(本地回环地址):

  • 特殊的IP地址 ,永远指向本机自己

  • 作用:让运行在本机上的程序通过网络协议相互通信,但数据不会真的发到物理网络上去。

  • 其他形式localhost(域名形式,通常解析为127.0.0.1)

两者结合的意义: 当你在netstat中看到:127.0.0.1:6379 这表示:

  • Redis服务只在本机监听(127.0.0.1)

  • 监听在默认的6379端口

  • 只有本机上的程序能连接到这个Redis服务

  • 外部网络的其他计算机无法访问,安全性较高

配置变化 :如果配置文件中绑定到 0.0.0.0:6379,则意味着:

  • Redis服务监听所有网络接口

  • 任何能访问到这台计算机的客户端都可以连接

  • 适用于需要从外部访问Redis的场景,但要注意配置防火墙和密码认证。


五、修改Redis配置文件(修改两个地方)

如果此时我们需要远程访问云服务器上部署的Redis服务端的话,则需要修改Redis配置文件,将bind参数设置为0.0.0.0或特定IP,并设置密码认证(当前阶段我们可以不设置密码,后期使用到了再设置)。

是否需要为 Redis 设置密码? 不建议设置密码!虽然当前没有设置密码,但这种配置非常安全。 只要存储的数据价值不高,就完全不需要担心安全问题。我们主要是学习使用,并不是做什么公司业务,所以不设置也行的。

修改Redis配置文件,首先要cd到Redis的主要配置目录;而/etc/redis/ 是 Redis 在 Linux 系统中的主要配置目录。

目录作用 :这是 Redis 服务器存放配置文件的核心位置,类似于:

  • MySQL → /etc/mysql/

  • Nginx → /etc/nginx/

  • Apache → /etc/apache2/

bash 复制代码
cd /etc/redis

我们通过ll命令详细查看Redis的主要配置目录/etc/redis;可以看到里面有一个配置文件redis.conf,它是Redis的主配置文件;我们目的是需要远程访问云服务器上部署的Redis服务端,则需要修改Redis配置文件的两个地方,如下:

bash 复制代码
vim redis.conf

vim进去之后首先下拉找到需要修改的两个地方,然后跟着步骤来:

1、修改绑定地址 bind 0.0.0.0

**原配置:**bind 127.0.0.1 ::1

**修改后:**bind 0.0.0.0

含义和作用:

  • 127.0.0.1:只允许本机连接

  • 0.0.0.0 :允许所有网络接口的连接

  • 作用 :让Redis可以接受来自其他计算机的网络连接,而不仅仅是本机

关于IPv6的::1

  • ::1是IPv6的本地回环地址(等同于IPv4的127.0.0.1

  • 删除::1只保留0.0.0.0也是可以的,因为:

    • 大多数环境使用IPv4就够了

    • 0.0.0.0通常也涵盖IPv6的监听

2、关闭保护模式 protected-mode no

**原配置:**protected-mode yes

**修改后:**protected-mode no

含义和作用:

  • protected-mode yes:安全保护模式开启

    • 如果没有设置密码且只绑定127.0.0.1,拒绝外部连接

    • 这是Redis的默认安全机制

  • protected-mode no:关闭保护模式

    • 作用:允许外部客户端连接,即使没有设置密码

保存上面的两个配置修改并强制退出:

在配置文件中,我们也看到了配置中说明6379是Redis服务端的默认端口号:

⚠️ 安全警告:同时进行这两个修改后:

  • Redis将完全对外开放

  • 任何能访问到你服务器IP的人都可以连接Redis

  • 如果没有设置密码,数据将完全暴露

建议的安全措施(了解即可):(暂时不用设置)

sql 复制代码
# 在redis.conf中设置密码
requirepass your_strong_password

# 或者使用防火墙限制访问
sudo ufw allow from 192.168.1.0/24 to any port 6379

这两个修改通常用于开发测试环境内网可信环境,生产环境务必配合密码和防火墙使用。

补充概念:

什么是配置文件?

配置文件 就是软件的"功能说明书"或"个性化设定菜单",它用文本形式告诉软件:应该如何运行、开启哪些功能、使用什么参数

为什么需要配置文件?

1. 灵活性:同一款软件,通过不同配置可以适应不同场景。例子:Redis 可以配置成内存缓存、持久化数据库、或主从复制集群

2. 无需修改代码:普通用户不用懂编程就能定制软件行为、通过修改文本文件就能改变软件功能

3. 持久化设置:程序重启后,配置依然有效、不像命令行参数那样每次都要重新输入

配置文件的常见形式

文本格式

sql 复制代码
# Redis 配置文件示例
port 6379                    # 服务端口
bind 0.0.0.0                # 绑定地址
requirepass mypassword       # 访问密码
maxmemory 1gb               # 内存限制

其他格式

  • JSON格式:{"port": 6379, "host": "0.0.0.0"}

  • YAML格式:更人类可读的层次结构

  • XML格式:比较重量级的配置


六、重新启动Redis服务端

bash 复制代码
service redis-server restart

输入上面的重启Redis服务端命令之后没任何提示说明重启成功:

控制 Redis 服务端

bash 复制代码
#启动 Redis 服务端:
service redis-server start

#停止 Redis 服务端:
service redis-server stop

通过上面的控制命令,我们可以自由地控制Redis的服务端的开关,方便测试和学习工作的开展。

bash 复制代码
service redis-server status

我们也可以使用status来查看Redis服务端的运行情况,可以看到active (running)就说明Redis重启之后正在运行:

使用刚刚安装的Redis其中的客户端连接云服务器上的Redis服务端:

bash 复制代码
redis-cli

后面可以通过学到的命令来指定连接的Redis服务器的IP地址和端口,但当前使用默认值来连接服务端就可以了。输入上面的登录命令后直接回车,如下:

如上面的登录输出结果,默认连接了云服务器上(127.0.0.1)的Redis,端口号为默认端口号6379。

在Redis客户端中输入ping验证客户端是否登录连接成功验证,如下:

sql 复制代码
ping

回车后输出PONG就是代表了连接Redis客户端成功:

这是一个很好的验证方法,用 ping 命令来验证连接是 Redis 的一个经典设计。

核心原因:简单的心跳检测机制 。你可以把 ping-PONG 理解为一次 "心跳""回声测试"

1. 它的工作方式就像"对暗号"

  • 客户端 :发出 ping (意思是:"喂,你在吗?")

  • Redis服务器 :如果运行正常且连接畅通,就会回复 PONG (意思是:"我在,连接正常!")

这个过程完成了一次最简单的请求-响应循环。

2. 为什么不用更复杂的命令?(这些复杂的命令后面会学习到)

GETSET 这样的命令需要操作数据,如果只是为了测试连接,它们:

  • 有副作用:可能会改变数据状态。

  • 需要参数 :比如 GET key,你需要提供一个键名。

  • 更复杂:服务器需要执行更多逻辑。

ping 命令:

  • 无任何副作用:不读取、不修改任何数据。

  • 无需任何参数:直接使用。

  • 极其轻量:服务器处理起来最快、最直接。

3. 它能综合验证什么?

一个成功的 ping-PONG 响应,实际上证明了以下几点全部正常:

  • 网络连接:你的客户端和服务器之间的网络是通的。

  • Redis服务进程:Redis服务器正在运行并且正在监听。

  • 身份认证:如果你设置了密码,客户端也已经成功认证。

  • 协议通信:客户端和服务器能够正确地按照Redis协议进行通信。

总结ping-PONG 是Redis设计的一个最小、最纯粹、无副作用的连接健康度检查命令,它的成功返回是所有后续操作能够正常进行的基础。


七、退出Redis客户端(两种方法)

我们登录Redis客户端之后,若想退出的话可以使用Ctrl+d退出Redis客户端,相当于在Linux上输入了一个EOF文件结束符标记。很多用命令行的客户端都是可以这样退出的,比较通用,当然还有其他更优雅的退出方法,后面会补充:

核心概念:EOF(End Of File)。 Ctrl + D 在 Unix/Linux 系统中表示 EOF(文件结束符)

工作原理:

1. 对于交互式命令行程序

  • 当你在空行 按下 Ctrl + D,相当于告诉程序:"我的输入结束了"

  • Redis客户端收到这个信号,就理解为:"用户没有更多命令要输入了,可以退出了"

为什么很多命令行客户端都支持? 因为这是一种 标准Unix约定,很多交互式程序都遵循这个设计:

程序 退出方式
Redis客户端 Ctrl + D
Python解释器 Ctrl + D
MySQL客户端 Ctrl + D
系统终端 Ctrl + D(会退出登录)

两种退出方式的区别(都可以使用)

  • quit 命令:程序定义的退出指令,Redis会优雅关闭连接

  • Ctrl + D:系统级的"输入结束"信号,更通用,但可能不够优雅

总结Ctrl + D 是Unix系统的"通用退格键",告诉程序"我说完了",很多基于标准输入的命令行工具都会响应这个信号来退出。

相关推荐
aitav03 小时前
⚡ arm 32位嵌入式 Linux 系统移植 NTP 服务
linux·arm开发·ntp
爱奥尼欧3 小时前
【Linux笔记】网络部分——socket 编程 TCP实现多台虚拟机使用指令访问云服务器
linux·服务器·网络
yolo_guo3 小时前
sqlite 使用: 03-问题记录:在使用 sqlite3_bind_text 中设置 SQLITE_STATIC 参数时,处理不当造成的字符乱码
linux·c++·sqlite
想睡hhh3 小时前
mysql表的操作——mysql表的约束
数据库·mysql
shaohaoyongchuang3 小时前
9-mysql编程
数据库
m0”-“0m3 小时前
MySQL、Nignx和Docker在Linux上的安装详解
linux·数据库·mysql
野犬寒鸦3 小时前
从零起步学习Redis || 第十章:主从复制的实现流程与常见问题处理方案深层解析
java·服务器·数据库·redis·后端·缓存
luopandeng4 小时前
amd npt技术 对比 intel ept 技术
java·linux·网络
---学无止境---4 小时前
Linux中kmalloc内存分配函数的实现
linux