2.背景知识和环境搭建【由浅入深-redis】


第一章 初识 Redis

Redis(Remote Dictionary Server)是一种基于内存的高性能键值数据库,主要用于解决传统数据库在高并发场景下面临的访问压力问题。与 MySQL 这类关系型数据库不同,Redis 不依赖复杂的表结构存储数据,而是通过键值(Key-Value)的方式组织数据,并将数据主要保存在内存中,因此能够提供极低的访问延迟和极高的读写性能。

在实际分布式系统中,Redis 通常并不是完全替代数据库,而是作为数据库之外的重要缓存和数据处理组件,与 MySQL 等持久化存储共同组成完整的数据架构。例如,MySQL 负责保存完整业务数据,Redis 负责保存访问频率较高的数据,通过减少数据库访问次数提升系统整体性能。

1.1 Redis 特性

Redis 能够广泛应用于互联网系统,主要依赖于其在数据结构、性能、扩展能力以及高可用方面提供的特性。

1.1.1 基于内存的数据存储

Redis 最核心的特点是基于内存存储数据。

传统关系型数据库,例如 MySQL,主要通过磁盘文件保存数据。数据需要经过磁盘 I/O 操作才能完成读取和写入,而磁盘访问速度相对较慢,在高并发访问情况下容易成为系统瓶颈。

Redis 则主要将数据保存在内存中,客户端访问数据时可以直接从内存读取,因此具有更低的访问延迟。

Redis 使用键值(Key-Value)结构存储数据,其中 Key 作为数据唯一标识,Value 则可以保存多种不同的数据结构。Redis 的 key 都是字符串/二进制序列;value 才可以是 string、list、hash、set、zset、stream 等类型。

例如:

key → value

user:1001 → 用户信息
product:2001 → 商品信息
session:abc → 登录状态

Redis 支持多种数据结构,包括:

  • String(字符串)
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • Sorted Set(有序集合)
  • Stream(流)

这些数据结构使 Redis 不仅可以作为简单缓存使用,还能够满足计数、排行榜、消息处理等多种业务需求。

1.1.2 丰富的数据操作能力

Redis 不只是简单保存字符串,而是针对不同数据结构提供了丰富的操作命令。

例如,对于 String 类型,可以直接进行字符串存储,也可以用于计数场景;Hash 类型适合保存对象结构数据;List 可以实现消息队列中的先进先出结构;Sorted Set 可以根据分值实现排行榜功能。

相比传统数据库需要通过 SQL 语句完成数据查询和处理,Redis 可以直接针对内存中的数据结构进行操作,使很多业务场景下的数据处理更加高效。

1.1.3 可编程能力

Redis 支持通过 Lua 脚本以及服务端扩展能力完成更加复杂的数据处理逻辑。

传统模式下,客户端通常需要多次请求 Redis 执行多个操作:

客户端
   |
   | 请求1
   ↓
Redis

   |
   | 请求2
   ↓
Redis

多次网络通信会增加额外开销。

Redis 通过 Lua 脚本,可以将多个操作封装到服务器端一次执行,将复杂逻辑放在 Redis 内部完成,从而减少网络交互,提高执行效率。

Lua 是一种轻量级脚本语言,Redis 使用 Lua 作为服务端脚本支持语言,可以在 Redis 内部执行自定义逻辑。

1.1.4 可扩展能力

Redis 提供了扩展机制,可以基于 Redis 原有能力进行功能扩展。

Redis 提供了模块 API,开发者可以通过 C、C++、Rust 等语言编写 Redis 模块,将新的数据类型或者功能集成到 Redis 中。

例如:

  • 使用 Redis 原生提供的数据结构完成基础缓存;
  • 通过模块扩展新的数据处理能力;
  • 根据业务需求增强 Redis 功能。

这种扩展机制使 Redis 不仅是一个固定功能的缓存数据库,而是具有一定可扩展能力的数据平台。

1.1.5 持久化能力

虽然 Redis 是基于内存的数据存储系统,但它同样支持数据持久化。

由于 Redis 数据主要存放在内存中,如果服务器发生故障或者进程退出,内存中的数据可能会丢失。因此 Redis 提供持久化机制,可以将内存中的数据保存到磁盘中。

Redis 持久化主要用于解决两个问题:

  1. 防止 Redis 重启后数据全部丢失;
  2. 在服务器恢复后能够重新加载之前的数据状态。

通过持久化机制,Redis 可以在保证高速访问的同时,提高数据可靠性。

1.1.6 集群能力

单个 Redis 节点的存储能力受到机器内存限制,当业务数据量不断增长时,单节点可能无法满足存储需求。

Redis 提供集群能力,通过多个 Redis 节点共同存储数据,实现水平扩展。

例如:

          Redis 集群

      节点1       节点2       节点3

       数据1      数据2       数据3

通过数据分片方式,可以将原本存储在一个 Redis 节点中的数据拆分到多个节点,从而突破单机资源限制。

1.1.7 高可用能力

Redis 支持主从复制以及故障转移机制,提高系统可用性。

在主从模式中,一个 Redis 节点作为主节点负责处理写操作,多个从节点复制主节点数据。当主节点出现故障时,可以通过故障转移机制切换新的主节点,减少服务中断时间。

因此,Redis 不仅能够提供高速访问能力,也能够满足分布式系统对于可靠性的要求。

1.1.8 Redis 为什么快

Redis 的高性能主要来自多个方面:

  1. Redis 数据主要存储在内存中,避免了大量磁盘 I/O 操作。
  2. Redis 内部采用高效的数据结构,不同的数据结构针对不同业务场景进行了优化。
  3. Redis 使用单线程模型处理核心请求,通过事件循环机制处理网络请求,避免了多线程环境下锁竞争带来的额外开销。Redis 的单线程主要负责执行命令操作,而网络通信等部分可以通过多线程辅助处理,因此并不是所有工作都由单线程完成。
  4. Redis 采用事件驱动模型,通过 I/O 多路复用机制同时处理多个客户端连接。

例如:

多个客户端连接
        |
        ↓
  I/O 多路复用
        |
        ↓
 Redis 事件循环
        |
        ↓
    执行命令

这种模型避免了传统阻塞式网络编程中大量线程等待资源的问题,使 Redis 能够在高并发环境下保持较高吞吐量。

此外,Redis 主要执行内存数据操作,计算复杂度通常较低,因此单线程模型也能够满足大量业务场景需求。


1.2 Redis 使用场景

Redis 的核心定位是高性能内存数据存储,因此它通常用于需要快速访问数据的业务场景。

1.2.1 缓存数据库

缓存是 Redis 最常见的应用场景。

在大型互联网系统中,大量请求直接访问 MySQL 会造成数据库压力过大。为了降低数据库负载,可以将访问频率较高的数据提前保存到 Redis 中。

整体流程如下:

客户端请求

      ↓

Redis 查询缓存

      ↓
存在
      ↓
直接返回数据


不存在

      ↓

查询 MySQL

      ↓

写入 Redis

      ↓

返回数据

例如:

  • 商品详情;
  • 用户信息;
  • 热门文章;
  • 配置信息。

这些数据通常读取频率远高于修改频率,非常适合存储在 Redis 中。

在实际系统中,并不是所有数据都放入 Redis,而是根据业务访问特点选择热点数据进行缓存。

例如:

Redis:保存热点数据

MySQL:保存完整业务数据

通过这种方式,可以同时利用 Redis 的高速访问能力和 MySQL 的持久化能力。

1.2.2 搜索结果缓存

搜索系统通常需要处理大量查询请求。

如果每一次搜索都直接访问数据库,会产生大量重复查询压力。

因此,可以将热门搜索结果保存到 Redis 中:

用户搜索关键词

        ↓

查询 Redis 缓存

        ↓

存在 → 返回结果

不存在 → 查询数据库 → 保存 Redis

例如:

  • 热门商品搜索;
  • 新闻搜索;
  • 网站关键词查询。

对于访问频率较高且变化不频繁的数据,Redis 可以有效降低后端数据库压力。

1.2.3 Session 会话存储

在传统 Web 应用中,用户登录后的 Session 信息通常保存在应用服务器本地。

例如:

客户端
  |
  ↓
应用服务器1
  |
 Session 数据

但是在分布式系统中,通常存在多个应用服务器,并通过负载均衡分发请求。

此时,同一个用户的多次请求可能被分配到不同服务器:

          负载均衡

        /    |    \

   服务1  服务2  服务3

如果 Session 保存在单台服务器本地,那么用户再次访问其他服务器时可能无法找到自己的登录状态。

解决方式是将 Session 集中存储到 Redis:

在这里插入图片描述

所有应用服务器共享 Redis 中的会话数据,因此无论请求访问哪台服务器,都可以获取用户登录状态。

1.2.4 消息队列

Redis 也可以用于实现简单的消息队列。此处咱们说到的消息队列,不是Linux进程间通信的那个消息队列

在分布式系统中,服务之间经常需要异步通信,例如:

生产者服务

      ↓

消息队列

      ↓

消费者服务

通过消息队列,可以降低系统耦合度,并提高整体处理能力。

Redis 提供 List、Stream 等数据结构,可以实现消息发送和消费。

相比专门的消息队列系统,例如 RabbitMQ、Kafka、RocketMQ 等,Redis 的消息队列能力更加轻量,适用于一些简单消息场景。

例如:

  • 异步任务处理;
  • 简单消息通知;
  • 服务之间的数据传递。

当业务需要复杂消息确认、消息堆积、大规模消费能力时,通常会选择专业消息队列系统。

1.2.5 Redis 不适合存储什么

虽然 Redis 性能很高,但并不是所有数据都适合存储在 Redis 中。

Redis 基于内存保存数据,而内存资源有限,因此不适合存储大规模、低访问频率的数据。

例如:

  • 海量历史数据;
  • 大文件数据;
  • 长期归档数据。

这类数据通常应该保存到数据库、对象存储或者文件系统中。

Redis 更适合保存访问频繁、数据规模可控、对访问速度要求较高的数据。

因此,在实际架构设计中,Redis 通常作为高速数据访问层存在,而不是替代所有数据存储系统。

通过合理结合 Redis、关系型数据库以及其他分布式组件,可以构建同时具备高性能、高可靠性和良好扩展能力的现代互联网系统。

第二章 Redis 安装与运行配置

Redis 作为一个高性能内存数据库,在实际使用之前需要完成安装、配置以及服务管理。Redis 在 Linux 环境中提供多种安装方式,不同方式在版本控制、部署效率以及后续维护方面存在差异。

对于学习 Redis 原理、源码分析以及模拟企业部署环境而言,源码安装具有更强的可控性。通过源码编译,可以明确指定 Redis 版本,同时保留完整源码环境,方便后续理解 Redis 内部实现。因此,本章采用 Redis 6.2.17 源码编译安装方式 完成部署。

2.1 Redis 安装方式选择

Redis 常见安装方式主要包括 包管理器安装、二进制安装以及源码编译安装。

安装方式特点
包管理器安装安装简单,但版本受系统仓库限制
二进制安装无需编译,可以快速部署
源码编译安装版本可控,保留源码,适合学习和生产环境

包管理器安装通常是最简单的方式,例如:

yum install redis

执行该命令后,系统会自动完成 Redis 安装。但是这种方式依赖系统软件仓库,Redis 版本由仓库维护者决定,无法保证一定满足业务需求。

例如,业务环境需要使用 Redis 6.x,而当前系统仓库提供的是 Redis 5.x,此时通过包管理器安装就无法满足版本要求。

源码安装则可以直接选择指定版本:

Redis 6.2.17

通过源码编译生成 Redis 可执行程序,可以保证不同环境之间使用相同版本的 Redis,因此更适合开发、测试以及生产环境部署。


2.2 Redis 6.2.17 源码安装

补充:查看系统环境hostnamectl

输出类似:

Operating System: CentOS Linux 8
Kernel: Linux 4.18.0-348.el8.x86_64
Architecture: x86-64

可以同时看到:

  • 系统版本
  • 内核版本
  • CPU 架构

补充: /usr/local/src 目录作用

cd /usr/local/src 进入 /usr/local/src 目录,把 Redis 源码下载并解压到这里。不是 Redis 必须要求的目录,而是一种Linux 下源码安装软件时的常见目录规范。

为什么选择 /usr/local/src?

Linux 文件系统有一些约定:

/
├── bin                  # 系统基本命令,存放普通用户和系统启动需要的可执行程序
│   ├── ls
│   ├── cp
│   └── mv
│
├── boot                 # 系统启动相关文件
│   ├── kernel           # Linux 内核文件
│   └── grub             # 引导程序配置
│
├── dev                  # 设备文件目录,将硬件设备抽象为文件
│   ├── sda              # 磁盘设备
│   └── tty              # 终端设备
│
├── etc                  # 系统和软件配置文件
│   ├── passwd           # 用户信息
│   ├── hosts            # 主机解析配置
│   └── redis            # Redis 配置目录
│       └── redis.conf
│
├── home                 # 普通用户家目录
│   └── username
│
├── lib                  # 系统核心共享库文件
│   └── *.so
│
├── lib64                # 64 位系统共享库文件
│
├── media                # 自动挂载的移动设备目录
│   └── cdrom
│
├── mnt                  # 临时挂载文件系统目录
│
├── opt                  # 第三方软件安装目录
│   └── software
│       └── redis
│
├── proc                 # 虚拟文件系统,保存内核运行状态信息
│   └── cpuinfo
│
├── root                 # root 用户家目录
│
├── run                  # 系统运行时产生的数据
│
├── sbin                 # 系统管理员使用的命令
│   ├── shutdown
│   └── reboot
│
├── srv                  # 服务程序运行产生的数据
│
├── sys                  # 虚拟文件系统,提供内核和硬件信息
│
├── tmp                  # 临时文件目录,系统可能自动清理
│
├── usr                  # 用户程序和资源目录
│   ├── bin              # 普通用户可执行程序
│   │   ├── java
│   │   └── python
│   │
│   ├── lib              # 用户程序依赖的库文件
│   │
│   ├── local            # 用户自行安装的软件
│   │   ├── bin          # 软件可执行文件
│   │   │   ├── redis-server
│   │   │   └── redis-cli
│   │   │
│   │   ├── lib          # 软件运行依赖库
│   │   │
│   │   └── src          # 软件源码
│   │       └── redis-6.2.17
│   │
│   └── share            # 共享文档、帮助文件
│
└── var                  # 经常变化的数据
    ├── log              # 系统和软件日志
    │   └── redis
    │       └── redis-server.log
    │
    ├── lib              # 软件运行数据
    │   └── redis
    │       └── dump.rdb
    │
    ├── cache            # 软件缓存
    │
    └── spool            # 队列和任务数据

其中: /usr/local表示:用户自己安装的软件,不属于系统包管理器。

例如:通过源码安装:

Redis
Nginx
MySQL
JDK
Tomcat

通常都会放这里。

/usr/local/src表示:保存软件源代码的位置。

例如:

/usr/local/src
│
├── redis-6.2.17
│   ├── src
│   ├── redis.conf
│   ├── Makefile
│
├── nginx-1.26.0
│
└── mysql-8.0

那能不能放其他地方?当然可以。

2.2.1 安装环境准备

Redis 使用 C 语言开发,源码安装需要先准备编译环境。

安装 Redis 编译依赖:

dnf install -y gcc make wget

其中:

  • gcc:C 语言编译器,用于将 Redis 源代码编译成可执行程序;
  • make:构建工具,根据 Redis 提供的 Makefile 自动执行编译流程;
  • wget:用于下载 Redis 源码压缩包。

完成环境准备后,系统已经具备 Redis 源码编译所需条件。


2.2.2 Redis 源码下载与编译

Linux 系统通常将源码文件存放在:

/usr/local/src

目录。

进入源码目录:

cd /usr/local/src

下载 Redis 6.2.17:

wget https://download.redis.io/releases/redis-6.2.17.tar.gz

下载完成后得到:

redis-6.2.17.tar.gz

解压源码:

tar -zxvf redis-6.2.17.tar.gz

进入 Redis 源码目录:

cd redis-6.2.17

Redis 源码目录主要包含:

文件或目录作用
srcRedis 核心源码
redis.confRedis 默认配置文件
MakefileRedis 编译规则

其中:

  • src 保存 Redis 服务端核心实现;
  • redis.conf 保存 Redis 运行参数;
  • Makefile 定义 Redis 编译过程。

执行编译:

make

编译过程中,编译器会根据 Makefile 中定义的规则,将 Redis 源代码转换成可执行程序。

编译完成后,会生成多个 Redis 工具:

程序作用
redis-serverRedis 服务端程序
redis-cliRedis 客户端程序
redis-benchmarkRedis 性能测试工具
redis-check-aofAOF 文件检测工具
redis-check-rdbRDB 文件检测工具

其中:

  • redis-server 用于启动 Redis 服务;
  • redis-cli 用于连接 Redis 并执行命令。

Redis 提供:

make test

用于验证编译结果。

如果执行过程中出现:

You need tcl 8.5 or newer in order to run the Redis test

说明缺少 Tcl 测试环境。

安装 Tcl:

dnf install -y tcl

重新执行:

make test

如果出现:

All tests passed without errors!

说明 Redis 编译测试通过。

需要注意,make test 主要用于验证编译结果,并不是 Redis 启动运行的必要步骤。


2.2.3 Redis 程序安装

Redis 编译完成后,需要执行:

make install

将 Redis 可执行程序安装到系统目录。

默认安装位置:

/usr/local/bin

查看 Redis 安装位置:

which redis-server

输出:

/usr/local/bin/redis-server

安装完成后,可以直接执行:

redis-server

启动 Redis。

相比包管理器安装,源码安装能够直接控制 Redis 程序位置和版本,不需要额外调整复杂目录结构。


2.3 Redis 运行环境配置

Redis 安装完成后,还需要对运行环境进行配置,包括配置文件、网络访问、后台运行以及数据和日志目录。

2.3.1 Redis 配置文件管理

Redis 源码目录中提供默认配置文件:

redis.conf

为了方便管理,需要将配置文件独立保存。

创建配置目录:

mkdir -p /etc/redis

复制默认配置:

cp redis.conf /etc/redis/redis.conf

之后启动 Redis 时指定该配置文件:

redis-server /etc/redis/redis.conf

通过独立配置文件管理 Redis 参数,可以避免直接修改源码目录中的默认配置。


2.3.2 Redis 网络访问配置

Redis 默认监听:

bind 127.0.0.1

表示 Redis 只允许本机访问。

这种配置适合单机测试环境,但是在实际开发环境中,应用服务器可能和 Redis 部署在不同机器,因此需要开放远程访问。

修改:

bind 0.0.0.0

表示 Redis 监听所有网络接口。

同时关闭保护模式:

protected-mode no

Redis 默认开启保护模式,用于限制未经安全配置的远程访问。

修改后,客户端可以从其他机器连接 Redis。

需要注意,开放所有网络接口会增加 Redis 暴露风险,因此生产环境通常需要结合防火墙、安全组以及密码认证限制访问。


2.3.3 Redis 后台运行配置

Redis 默认以前台方式启动:

daemonize no

启动 Redis 后会占用当前终端。

修改为:

daemonize yes

开启后台运行模式。

配置完成后:

redis-server /etc/redis/redis.conf

Redis 会作为后台进程运行。


2.3.4 Redis 数据与日志配置

Redis 数据主要保存在内存中,同时支持持久化机制,因此需要指定数据保存目录。

创建数据目录:

mkdir -p /var/lib/redis

修改配置:

dir /var/lib/redis

Redis 持久化文件会保存到该目录。

创建日志目录:

mkdir -p /var/log/redis/

修改配置:

logfile /var/log/redis/redis-server.log

最终 Redis 相关目录结构:

Redis
│
├── /usr/local/bin
│   ├── redis-server                  # Redis服务端程序
│   └── redis-cli                     # Redis客户端程序
│
├── /etc/redis
│   └── redis.conf                    # Redis运行配置文件
│
├── /var/lib/redis
│   ├── dump.rdb                      # RDB持久化文件
│   └── appendonly.aof                # AOF持久化文件
│
├──/usr/lib/systemd/system
│   └── redis.service                 # systemd服务管理文件
│
└── /var/log/redis
    └── redis-server.log              # Redis运行日志

通过将程序、配置、数据和日志分离,可以提高后续维护效率。


2.4 Redis 服务启动与管理

2.4.1 Redis 启动与连接验证

使用配置文件启动 Redis:

redis-server /etc/redis/redis.conf

查看 Redis 运行状态:

ps -ef | grep redis

如果出现:

redis-server *:6379

说明 Redis 服务已经启动。

使用 Redis 客户端连接:

redis-cli

执行:

ping

返回:

PONG

表示 Redis 服务正常运行。


2.4.2 Redis 服务停止

查看 Redis 进程:

ps aux | grep redis

可以通过 PID 停止 Redis:

kill PID

但是直接终止进程不属于 Redis 推荐关闭方式。

更推荐:

redis-cli shutdown

该方式会让 Redis 按正常流程关闭,并释放相关资源。


2.4.3 systemd 管理 Redis

源码安装 Redis 后,make install 只会安装 Redis 可执行程序,并不会自动创建 systemd 服务,因此默认无法直接使用 ,除非是通过系统软件包yum install redis通过安装的 Redis,通常会自动创建 systemd 服务文件,因此可以直接使用 systemctl 管理。

systemctl start redis

进行管理。

如果需要使用 systemd 管理 Redis,需要手动创建服务文件:

vim /usr/lib/systemd/system/redis.service

配置:

[Unit]
Description=Redis Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

重新加载 systemd:

systemctl daemon-reload

之后即可通过 systemd 管理 Redis:

systemctl start redis       # 启动 Redis
systemctl stop redis        # 停止 Redis
systemctl restart redis     # 重启 Redis
systemctl enable redis      # 设置开机启动
systemctl status redis      # 查看运行状态

查看 Redis 是否监听端口:

ss -nlpt | grep 6379

正常输出:

0.0.0.0:6379 LISTEN redis-server

表示 Redis 已成功启动。

通过 systemd 管理 Redis 的前提是已经创建对应的服务文件。yum 安装的 Redis 通常会自动创建该文件,而源码安装需要手动配置。完成配置后,Redis 的启动、停止和开机自启即可统一由 systemd 管理。

第三章 Redis 基础运行模型与客户端访问

Redis 安装完成并启动服务后,需要进一步了解 Redis 的基本运行方式。Redis 并不是一个单独运行的命令工具,而是由 Redis 服务端(Redis Server) 和 Redis 客户端(Redis Client) 两部分组成。

Redis Server 负责数据存储、命令执行以及客户端连接管理,是 Redis 的核心运行程序;Redis Client 负责向 Redis Server 发送请求,并接收服务端返回的数据。

二者通过网络进行通信,因此客户端和服务端既可以部署在同一台机器,也可以部署在不同机器上。

3.1 Redis 服务端管理

3.1.1 Redis 服务启动

Redis 服务端程序名称为:

redis-server

如果需要指定配置文件启动 Redis:

redis-server /etc/redis/redis.conf

启动 Redis 时,服务端会读取配置文件中的相关参数,例如监听地址、端口、数据目录以及日志配置等,然后按照配置运行。

Redis 默认监听端口为:

6379

启动完成后,可以通过查看进程确认 Redis 是否运行:

ps和netstat这两个命令查看的主要都是 Redis 服务端(redis-server),不是客户端(redis-cli)。

ps -ef | grep redis

也可以通过网络连接状态查看 Redis 是否监听端口:

netstat -nltp | grep redis

例如:

tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 13928/redis-server

其中:

  • 6379 表示 Redis 服务监听端口;
  • LISTEN 表示当前端口正在等待客户端连接;
  • redis-server 表示 Redis 服务进程。

如果修改了 Redis 配置文件,例如修改端口、持久化方式或者后台运行模式,需要重新启动 Redis 服务后配置才会生效。


3.1.2 Redis 服务停止

停止 Redis 服务时,可以先查看 Redis 服务进程:

netstat -nltp | grep redis

或者:

ps -ef | grep redis

获取 Redis 进程对应的 PID 后,可以通过:

kill PID

结束 Redis 服务。

例如:

kill 13928

但是直接通过 kill 关闭 Redis 属于强制结束进程,并不是 Redis 推荐的关闭方式。

Redis 提供了专门的关闭命令:

redis-cli shutdown

该命令会通知 Redis 服务端执行正常关闭流程,使 Redis 完成关闭操作。


3.2 Redis 客户端与服务端模型

Redis 采用经典的客户端-服务器模型。

其中:

  • Redis Server:负责保存数据、执行 Redis 命令以及响应客户端请求;
  • Redis Client:负责发送命令,并接收 Redis 返回结果。

客户端执行 Redis 命令时,并不会直接操作 Redis 内部数据,而是将请求发送给 Redis Server,由服务端完成具体的数据处理。

例如:

SET user:name Tom

客户端发送该命令后,Redis Server 会执行数据保存操作,并返回执行结果。

Redis Client 和 Redis Server 可以运行在同一台机器上:

Redis Client  ----  Redis Server

也可以部署在不同机器:

应用服务器  ----  Redis Server

在实际生产环境中,通常由应用程序作为 Redis 客户端,通过网络访问独立部署的 Redis 服务。
在这里插入图片描述


3.3 Redis 客户端类型

Redis 客户端存在多种形式,不同场景下可以选择不同客户端访问 Redis。

3.3.1 命令行客户端 redis-cli

Redis 官方提供了命令行客户端:

redis-cli

这是最常用的 Redis 管理工具。

启动后:

127.0.0.1:6379>

表示客户端已经连接到 Redis 服务。

可以执行:

ping

Redis 返回:

PONG

表示客户端与 Redis Server 通信正常。

如果 Redis 服务部署在其他机器,可以指定服务器地址和端口:

redis-cli -h 127.0.0.1 -p 6379

其中:

  • -h 表示指定 Redis 服务地址;
  • -p 表示指定 Redis 服务端口。
    在这里插入图片描述

3.3.2 图形化客户端

除了命令行客户端,还存在图形化 Redis 客户端。

图形化客户端通常通过可视化界面管理 Redis 数据,例如查看 Key、Value,执行 Redis 命令以及管理缓存数据。

这类客户端操作更加直观,适合开发和测试环境使用。

但是图形化客户端本质上仍然属于 Redis Client,需要连接 Redis Server。如果 Redis 未开放远程访问,或者存在权限限制,客户端可能无法连接 Redis。


3.3.3 基于 Redis API 的客户端

在实际开发中,应用程序通常不会直接使用 redis-cli 操作 Redis,而是通过编程语言提供的 Redis API 访问 Redis。

例如:

  • Java 程序通过 Redis 客户端访问 Redis;
  • Python 程序通过 Redis 库操作 Redis;
  • 其他语言通过对应 SDK 调用 Redis。

这种方式类似于数据库提供的开发接口,例如 MySQL 的 C API、JDBC 等。应用程序通过 API 封装 Redis 命令,然后与 Redis Server 通信。

因此,在实际系统中,Redis 通常作为独立的数据服务存在,由不同应用通过客户端连接并使用。


3.4 Redis 基本运行流程

Redis 的运行过程可以概括为:

客户端发送请求,Redis Server 接收请求并执行命令,最后将结果返回客户端。

例如:

客户端发送命令

        ↓

Redis Server 执行操作

        ↓

返回执行结果

客户端只负责请求和结果接收,而数据处理逻辑全部由 Redis Server 完成。

这种客户端与服务端分离的设计,使 Redis 可以被多个客户端同时访问,并作为独立的数据服务组件集成到不同业务系统中。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值