大数据-39 Redis 源码编译安装 启动 redis-server redis-cli

67 阅读5分钟

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 AI篇持续更新中!(长期更新)

AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用AI工具指南!📐🤖

💻 Java篇正式开启!(300篇)

目前2025年07月10日更新到: Java-68 深入浅出 分布式服务 Netty实现自定义RPC 附详细代码 MyBatis 已完结,Spring 已完结,Nginx已完结,Tomcat已完结,分布式服务正在更新!深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈! 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解

请添加图片描述

章节内容

上一节我们完成了:

  • Redis简介
  • Redis数据类型介绍
  • 缓存的场景
  • 读写模式介绍
  • Redis的适用场景

背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个大数据的学习环境,供我学习。

  • 2C4G 编号 h121
  • 2C4G 编号 h122
  • 2C2G 编号 h123

在这里插入图片描述

Redis简介

Redis(Remote Dictionary Server)是一个开源的、高性能的键值对存储系统,采用C语言开发。它支持多种数据结构,可用作数据库、缓存和消息中间件。Redis以其出色的性能著称,能够处理高吞吐量的数据操作,被广泛应用于Web应用、实时分析、游戏开发等领域。

主要特点:

  • 内存存储:数据主要存储在内存中,读写速度极快
  • 持久化支持:提供RDB和AOF两种持久化机制
  • 丰富的数据结构:支持字符串、哈希、列表等多种数据结构
  • 高可用性:支持主从复制和哨兵模式
  • 事务支持:通过MULTI/EXEC命令实现简单事务

官方网站为:

http://redis.io/

Redis数据类型

Redis支持五种核心数据类型,每种类型都有特定的使用场景和操作命令:

1. 字符串类型(String)

最基本的数据类型,可以存储字符串、整数或浮点数。最大能存储512MB。 典型应用场景:

  • 缓存简单数据
  • 计数器(如页面访问量)
  • 分布式锁

2. 散列类型(Hash)

适合存储对象,由字段-值对组成。每个哈希可以存储4亿多个字段-值对。 典型应用场景:

  • 存储用户对象(用户名、年龄等信息)
  • 购物车数据

3. 列表类型(List)

有序的字符串集合,按照插入顺序排序。支持从两端插入/删除元素。 典型应用场景:

  • 消息队列
  • 最新动态展示
  • 粉丝列表

4. 集合类型(Set)

无序的字符串集合,不允许重复元素。支持集合运算(交集、并集等)。 典型应用场景:

  • 标签系统
  • 共同好友
  • 去重统计

5. 有序集合类型(Sorted Set)

每个元素都关联一个分数(score),用于排序。元素唯一,但分数可以重复。 典型应用场景:

  • 排行榜
  • 带权重的队列
  • 范围查询

为什么要自己编译?

  • 跟进安全补丁:8.0.3 (2025-07 发布)修复了 HyperLogLog 越界写等 CVE,发行版仓库通常要过数周甚至数月才更新。自行编译能第一时间闭环安全风险。
  • 开启/关闭可选特性:核心二进制默认仅含传统数据结构。想用 JSON、Search、TimeSeries、Bloom 等,需要 BUILD_WITH_MODULES=yes。
  • 对接企业基础设施:例如编译进 TLS 支持 (BUILD_TLS=yes) 以符合内网安全规范,或用 USE_SYSTEMD=yes 生成 systemd 单元,减少手工维护。
  • 性能/调试自由度:可指定 `MALLOC=jemalloc

环境推荐

  • 最低要求:C11 兼容编译器、GNU make、libc。
  • 推荐:GCC ≥ 10 或 Clang ≥ 13,pkg-config,openssl-devel(TLS),tcl ≥ 8.5(跑单测)。

Redis下载

Redis 的发布版都在这里

http://download.redis.io/releases/

我们也可以使用 wget 命令进行下载:

wget http://download.redis.io/releases/redis-6.2.9.tar.gz

下载并保存到我们的 h121 云服务器: 在这里插入图片描述

解压配置

按照之前的习惯,对其进行解压和配置

tar -zxvf redis-6.2.9.tar.gz
mv redis-6.2.9 ../servers/

常用编译开关

  • 启用 TLS:make BUILD_TLS=yes,需 libssl-dev / openssl-devel
  • 打包所有官方模块:make BUILD_WITH_MODULES=yes,获得 JSON / Search / TS 等
  • systemd 集成:make USE_SYSTEMD=yes,生成 redis.service
  • 32-bit 二进制:make 32bit,非常态,测试内存 < 4 GiB 场景
  • 指定内存分配器:make MALLOC=libc 或 jemalloc,Linux 默认 jemalloc
  • 去掉 -Werror:make DISABLE_WERRORS=yes,某些老编译器警告过严时
  • 调试符号 / ASAN:make DEBUG=yes 或 手动 CFLAGS="-O0 -g -fsanitize=address",开发排错

编译安装

进入源码的路径,我们准备编译:

cd redis-6.2.9/src

目录中的文件大致如下: 在这里插入图片描述 使用指令进行编译:

make

此时将进行比较漫长的编译: 在这里插入图片描述 等待··· 在这里插入图片描述 当看到上图的内容时,表示你的Redis已经编译完毕了,我们执行如下指令进行安装:

mkdir /usr/redis -p
make install PREFIX=/usr/redis

可以看到已经顺利的完成了 Redis 的编译+安装 在这里插入图片描述

启动Redis

先将配置文件复制一份:

cd /opt/servers/redis-6.2.9
cp redis.conf /usr/redis/bin/

修改复制出来的文件

vim /usr/redis/bin/redis.conf

将当中的内容修改为:

daemonize yes
bind 0.0.0.0
protected-mode no

启动服务

cd /usr/redis/bin
./redis-server redis.conf

可以看到Redis服务已经正常运行了: 在这里插入图片描述

参数调优

  • vm.overcommit_memory = 1:立即 commit 内存,避免 fork AOF 时 OOM
  • 关闭透明大页:echo never > /sys/kernel/mm/transparent_hugepage/enabled,减少内存抖动
  • 文件句柄:ulimit -n 65535,高并发连接
  • swap:保持足够;同时配置 vm.swappiness=1,防止 Redis 被交换到磁盘

容器场景

若最终目标是 Docker,可选择:

# 基于官方源码镜像自行编译
FROM debian:12-slim
RUN apt update && apt install -y build-essential pkg-config \
           libssl-dev tcl git wget ca-certificates
RUN useradd -r -s /sbin/nologin redis
WORKDIR /usr/local/src
RUN wget -O redis-8.0.3.tar.gz \
        https://github.com/redis/redis/archive/refs/tags/8.0.3.tar.gz \
 && tar -xf redis-8.0.3.tar.gz \
 && cd redis-8.0.3 && make BUILD_TLS=yes -j$(nproc) \
 && make install PREFIX=/usr/local
...

也可以直接使用 redis:8.0.3-alpine 官方镜像省去编译环节。

这里只做简介,就不详细说了。