小白入门 Redis:一文搞懂是什么 + CentOS 安装全攻略
🎯 本文适合人群:零基础小白、后端开发新手、准备面试的同学
⏱️ 阅读时长:15分钟
📌 你将收获:理解 Redis 是什么、为什么用它、如何在 CentOS 上完整安装配置
📖 目录
一、Redis 是什么?
1.1 官方定义
Redis(Remote Dictionary Server,远程字典服务器)是一个开源的、基于内存的键值对(Key-Value)数据库。
1.2 通俗理解
💡 打个比方:
- MySQL 像一个图书馆,书籍(数据)都放在书架(磁盘)上,查找需要时间
- Redis 像你的书桌,常用的书(热点数据)直接放桌上,拿取超快
┌─────────────────────────────────────────┐
│ 应用程序(你的代码) │
└─────────────────────────────────────────┘
↓
┌─────────────────────────┐
│ Redis(内存,超快) │ ← 热点数据,毫秒级响应
└─────────────────────────┘
↓
┌─────────────────────────┐
│ MySQL(磁盘,较慢) │ ← 全量数据,持久化存储
└─────────────────────────┘
1.3 核心特点
| 特点 | 说明 | 通俗理解 |
|---|---|---|
| 内存存储 | 数据存在 RAM 中 | 就像把文件放在电脑内存里,而不是硬盘里 |
| 键值对 | Key-Value 结构 | 像 Python 的字典 {"name": "张三"} |
| 高性能 | QPS 可达 10万+ | 每秒可以处理 10 万次请求 |
| 数据结构丰富 | 支持 String、List、Set 等 | 不只是简单的字符串,还有列表、集合等 |
| 持久化 | 可以保存到磁盘 | 断电后数据不会丢失(需配置) |
| 单线程 | 命令执行是单线程 | 避免了多线程的锁竞争问题 |
二、为什么要用 Redis?
2.1 解决数据库性能瓶颈
问题场景:电商网站首页,每天 100 万用户访问,每次都查 MySQL
// ❌ 没有缓存:每次都查数据库
public List<Product> getHotProducts() {
// 每次查询耗时 200ms,数据库压力巨大
return productDao.queryHotProducts();
}
// ✅ 使用 Redis 缓存
public List<Product> getHotProducts() {
// 1. 先查 Redis(耗时 1ms)
List<Product> products = redisTemplate.get("hot:products");
if (products == null) {
// 2. Redis 没有,再查数据库
products = productDao.queryHotProducts();
// 3. 存入 Redis,下次直接用
redisTemplate.set("hot:products", products, 3600); // 缓存1小时
}
return products;
}
效果对比:
| 方案 | 每次查询耗时 | 数据库 QPS | 服务器压力 |
|---|---|---|---|
| 无缓存 | 200ms | 5000/秒 | 💀 爆炸 |
| Redis 缓存 | 1ms | 50/秒 | 😊 轻松 |
2.2 Redis vs 其他缓存方案
┌──────────────────────────────────────────────┐
│ 缓存方案对比 │
├──────────────────────────────────────────────┤
│ 1. 本地缓存(HashMap) │
│ ✅ 速度最快 │
│ ❌ 无法共享(多台服务器数据不一致) │
│ ❌ 内存限制(受单机内存约束) │
│ │
│ 2. Memcached │
│ ✅ 性能好 │
│ ❌ 只支持 String │
│ ❌ 不支持持久化 │
│ │
│ 3. Redis ⭐推荐 │
│ ✅ 数据结构丰富 │
│ ✅ 支持持久化 │
│ ✅ 支持集群 │
│ ✅ 功能强大(发布订阅、事务等) │
└──────────────────────────────────────────────┘
三、Redis 的应用场景
3.1 缓存(最常用)
// 场景:用户信息缓存
// Key: "user:1001"
// Value: {"id":1001,"name":"张三","age":25}
// 过期时间:30分钟
真实案例:
- 微博热搜榜(每分钟更新)
- 电商商品详情(库存、价格)
- 新闻 APP 首页文章列表
3.2 分布式锁
// 场景:秒杀活动,防止超卖
public boolean seckill(Long productId, Long userId) {
String lockKey = "lock:product:" + productId;
// 获取分布式锁(只有一个请求能成功)
boolean lock = redisTemplate.setIfAbsent(lockKey, userId.toString(), 10, TimeUnit.SECONDS);
if (lock) {
try {
// 执行秒杀逻辑
return doSeckill(productId, userId);
} finally {
// 释放锁
redisTemplate.delete(lockKey);
}
}
return false; // 获取锁失败
}
3.3 计数器
// 场景:文章点赞数
// 用户每点一次赞,Redis +1
redisTemplate.increment("article:1001:likes"); // 点赞数 +1
// 获取总点赞数
Long likes = redisTemplate.get("article:1001:likes");
3.4 排行榜
// 场景:游戏积分排行榜(使用 ZSet 有序集合)
// 玩家得分
redisTemplate.zadd("rank:game", 9500, "玩家A");
redisTemplate.zadd("rank:game", 8800, "玩家B");
redisTemplate.zadd("rank:game", 9200, "玩家C");
// 获取前 10 名
Set<String> top10 = redisTemplate.zrevrange("rank:game", 0, 9);
3.5 消息队列
// 场景:订单通知(使用 List 列表)
// 生产者:添加订单到队列
redisTemplate.lpush("queue:order", "订单1001");
// 消费者:从队列取出订单
String order = redisTemplate.rpop("queue:order");
3.6 Session 共享
┌─────────────┐ ┌─────────────┐
│ 用户登录 │ │ 服务器A │
│ Session 存 │───────▶│ Session │
│ 在哪里? │ └─────────────┘
└─────────────┘ │
│ 下次请求到了服务器B
▼
┌─────────────┐
│ 服务器B │
│ 找不到! │ ❌ Session 丢失
└─────────────┘
────────────────────────────────────────────
使用 Redis 存储 Session
┌─────────────┐ ┌─────────────┐
│ 用户登录 │ │ Redis │ ← 所有服务器共享
│ Session │───────▶│ Session │
└─────────────┘ └─────────────┘
▲
┌────────────┴────────────┐
│ │
┌─────────────┐ ┌─────────────┐
│ 服务器A │ │ 服务器B │
└─────────────┘ └─────────────┘
✅ 都能访问 ✅ 都能访问
四、CentOS 安装 Redis 完整教程
4.1 环境准备
# 查看系统版本
cat /etc/redhat-release
# CentOS Linux release 7.9.2009 (Core)
# 确保有 gcc 编译器(Redis 需要编译安装)
gcc --version
# 如果没有 gcc,先安装
sudo yum install -y gcc gcc-c++ make
4.2 方式一:yum 安装(推荐新手)
# 1. 安装 EPEL 仓库(Redis 在这个仓库里)
sudo yum install -y epel-release
# 2. 安装 Redis
sudo yum install -y redis
# 3. 查看版本
redis-server --version
# Redis server v=3.2.12 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=7897e7d0e13773f
# 4. 启动 Redis
sudo systemctl start redis
# 5. 设置开机自启
sudo systemctl enable redis
# 6. 查看状态
sudo systemctl status redis
# ● redis.service - Redis persistent key-value database
# Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled)
# Active: active (running) ✅
优点:简单快速,一键安装
缺点:版本较旧(3.2),无法安装最新版
4.3 方式二:源码编译安装(推荐进阶)
步骤 1:下载 Redis
# 1. 进入 /opt 目录(存放第三方软件)
cd /opt
# 2. 下载 Redis 7.0.15(截至 2024 年稳定版)
sudo wget https://download.redis.io/releases/redis-7.0.15.tar.gz
# 如果 wget 下载慢,可以用国内镜像
sudo wget https://mirrors.huaweicloud.com/redis/redis-7.0.15.tar.gz
# 3. 解压
sudo tar -zxvf redis-7.0.15.tar.gz
# 4. 进入目录
cd redis-7.0.15
步骤 2:编译安装
# 1. 编译(需要几分钟,耐心等待)
sudo make
# 如果报错 "zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file"
# 执行:sudo make MALLOC=libc
# 2. 安装到 /usr/local/bin(系统可执行文件目录)
sudo make install
# 3. 验证安装
redis-server --version
# Redis server v=7.0.15 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=123456789
步骤 3:配置 Redis
# 1. 创建配置文件目录
sudo mkdir -p /etc/redis
# 2. 创建数据目录
sudo mkdir -p /var/lib/redis
# 3. 创建日志目录
sudo mkdir -p /var/log/redis
# 4. 复制配置文件
sudo cp /opt/redis-7.0.15/redis.conf /etc/redis/redis.conf
# 5. 备份原配置
sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
步骤 4:修改配置文件(重要)
# 编辑配置文件
sudo vim /etc/redis/redis.conf
关键配置项(按 / 搜索关键字):
# ========== 1. 后台运行 ==========
# 搜索 "daemonize"
daemonize yes # 改为 yes(默认是 no)
# ========== 2. 绑定 IP ==========
# 搜索 "bind"
# bind 127.0.0.1 # 注释掉这行(加 # 号)
bind 0.0.0.0 # 允许所有 IP 访问(生产环境需配合防火墙)
# ========== 3. 端口 ==========
# 搜索 "port"
port 6379 # 默认端口,可以不改
# ========== 4. 密码(强烈建议设置)==========
# 搜索 "requirepass"
requirepass your_strong_password_123 # 设置密码
# ========== 5. 数据目录 ==========
# 搜索 "dir"
dir /var/lib/redis # 数据存储目录
# ========== 6. 日志文件 ==========
# 搜索 "logfile"
logfile /var/log/redis/redis.log
# ========== 7. 持久化(RDB)==========
# 搜索 "save"
save 900 1 # 900秒内有1次修改,触发保存
save 300 10 # 300秒内有10次修改,触发保存
save 60 10000 # 60秒内有10000次修改,触发保存
# ========== 8. 最大内存(可选)==========
# 搜索 "maxmemory"
maxmemory 2gb # 限制最大使用 2GB 内存
# 内存淘汰策略
maxmemory-policy allkeys-lru # 内存满时,删除最少使用的 key
配置说明:
| 配置项 | 作用 | 推荐值 |
|---|---|---|
daemonize |
是否后台运行 | yes |
bind |
允许哪些 IP 连接 | 0.0.0.0(所有)或 内网IP |
port |
端口号 | 6379 |
requirepass |
密码 | 必须设置 |
dir |
数据目录 | /var/lib/redis |
logfile |
日志文件 | /var/log/redis/redis.log |
步骤 5:创建系统服务
# 创建服务文件
sudo vim /etc/systemd/system/redis.service
复制以下内容:
[Unit]
Description=Redis In-Memory Data Store
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
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
# 创建 redis 用户(安全考虑)
sudo useradd -r -s /sbin/nologin redis
# 修改目录权限
sudo chown -R redis:redis /var/lib/redis
sudo chown -R redis:redis /var/log/redis
# 重载系统服务
sudo systemctl daemon-reload
# 启动 Redis
sudo systemctl start redis
# 设置开机自启
sudo systemctl enable redis
# 查看状态
sudo systemctl status redis
步骤 6:测试连接
# 1. 本地连接(需要输入密码)
redis-cli
# 2. 输入密码
127.0.0.1:6379> auth your_strong_password_123
OK
# 3. 测试命令
127.0.0.1:6379> ping
PONG # ✅ 连接成功
# 4. 设置一个值
127.0.0.1:6379> set name "小明"
OK
# 5. 获取值
127.0.0.1:6379> get name
"小明"
# 6. 查看所有 key
127.0.0.1:6379> keys *
1) "name"
# 7. 退出
127.0.0.1:6379> quit
4.4 防火墙配置
# 方式1:开放 6379 端口
sudo firewall-cmd --zone=public --add-port=6379/tcp --permanent
sudo firewall-cmd --reload
# 方式2:关闭防火墙(仅测试环境)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 查看端口是否开放
sudo firewall-cmd --list-ports
# 6379/tcp ✅
4.5 远程连接测试
# 在另一台机器上测试
redis-cli -h 192.168.1.100 -p 6379 -a your_strong_password_123
# 或者
redis-cli -h 192.168.1.100 -p 6379
192.168.1.100:6379> auth your_strong_password_123
OK
可视化工具推荐:
- Redis Desktop Manager(免费,跨平台)
- Another Redis Desktop Manager(开源)
- RedisInsight(官方工具)
五、Redis 配置详解
5.1 核心配置项速查表
| 配置项 | 默认值 | 说明 | 示例 |
|---|---|---|---|
bind |
127.0.0.1 | 监听的 IP 地址 | bind 0.0.0.0 |
port |
6379 | 监听端口 | port 6379 |
daemonize |
no | 是否后台运行 | daemonize yes |
requirepass |
无 | 密码 | requirepass 123456 |
timeout |
0 | 客户端闲置超时时间(秒) | timeout 300 |
databases |
16 | 数据库数量 | databases 16 |
maxclients |
10000 | 最大客户端连接数 | maxclients 10000 |
maxmemory |
0(无限制) | 最大内存 | maxmemory 2gb |
maxmemory-policy |
noeviction | 内存淘汰策略 | maxmemory-policy allkeys-lru |
5.2 内存淘汰策略详解
当 Redis 内存达到 maxmemory 限制时,会按照策略删除数据:
| 策略 | 说明 | 适用场景 |
|---|---|---|
noeviction |
不淘汰,写入报错 | 不推荐 |
allkeys-lru |
从所有 key 中删除最少使用的 | ⭐ 推荐(通用缓存) |
allkeys-lfu |
从所有 key 中删除最不常用的 | 热点数据缓存 |
volatile-lru |
从设置了过期时间的 key 中删除最少使用的 | 混合场景 |
volatile-ttl |
删除即将过期的 key | 特殊场景 |
allkeys-random |
随机删除 | 不推荐 |
# 示例:设置 LRU 策略
maxmemory 2gb
maxmemory-policy allkeys-lru
六、常见面试题
6.1 基础概念题
Q1:Redis 为什么这么快?
答案:
- 纯内存操作:数据存在 RAM 中,访问速度纳秒级
- 单线程模型:避免了线程切换和锁竞争的开销
- IO 多路复用:使用 epoll/kqueue,高效处理并发连接
- 高效的数据结构:针对不同场景优化(如跳表、压缩列表)
- 优化的底层实现:C 语言编写,性能极致
Q2:Redis 是单线程还是多线程?
答案:
- Redis 6.0 之前:完全单线程(命令执行、网络 IO)
- Redis 6.0 之后:
- 命令执行:仍是单线程(保证原子性)
- 网络 IO:引入多线程(提高并发)
- 持久化、异步删除:独立线程
┌─────────────────────────────────────┐
│ Redis 6.0+ 线程模型 │
├─────────────────────────────────────┤
│ 网络 IO 线程池(多线程) │
│ ↓ │
│ 命令执行(单线程) ← 核心! │
│ ↓ │
│ 持久化线程(独立线程) │
└─────────────────────────────────────┘
Q3:Redis 和 Memcached 的区别?
| 对比项 | Redis | Memcached |
|---|---|---|
| 数据类型 | String、List、Set、ZSet、Hash | 只支持 String |
| 持久化 | 支持(RDB、AOF) | 不支持 |
| 集群 | 支持(哨兵、Cluster) | 通过客户端实现 |
| 线程模型 | 单线程(6.0后IO多线程) | 多线程 |
| 过期策略 | 惰性删除 + 定期删除 | 惰性删除 |
| 应用场景 | 缓存、消息队列、排行榜等 | 纯缓存 |
Q4:为什么 Redis 单线程还能支持高并发?
答案:
- CPU 不是瓶颈:Redis 的瓶颈是内存和网络,而不是 CPU
- 避免上下文切换:单线程无需切换,效率更高
- IO 多路复用:一个线程可以同时监听多个客户端连接
传统多线程:
┌─────┐ ┌─────┐ ┌─────┐
│线程1│ │线程2│ │线程3│ ← 需要切换、加锁
└─────┘ └─────┘ └─────┘
Redis 单线程 + IO 多路复用:
┌───────────────────────────┐
│ 一个线程监听 1000 个连接 │ ← 无需切换
└───────────────────────────┘
6.2 安装配置题
Q5:如何设置 Redis 开机自启?
答案:
# CentOS 7+
sudo systemctl enable redis
# 查看是否设置成功
sudo systemctl is-enabled redis
# enabled ✅
Q6:如何查看 Redis 的配置?
答案:
# 方式1:查看配置文件
cat /etc/redis/redis.conf | grep -v "^#" | grep -v "^$"
# 方式2:在 redis-cli 中查看
redis-cli
127.0.0.1:6379> CONFIG GET * # 查看所有配置
127.0.0.1:6379> CONFIG GET maxmemory # 查看单个配置
Q7:如何动态修改 Redis 配置(无需重启)?
答案:
# 在 redis-cli 中执行
127.0.0.1:6379> CONFIG SET maxmemory 4gb
OK
# 持久化配置(否则重启后失效)
127.0.0.1:6379> CONFIG REWRITE
OK
6.3 实战问题
Q8:Redis 内存占用过高怎么办?
答案:
-
设置内存限制
maxmemory 2gb maxmemory-policy allkeys-lru -
分析大 key
# 查找大 key redis-cli --bigkeys -
设置过期时间
SET key value EX 3600 # 1小时后过期 -
清理无用数据
# 删除匹配的 key redis-cli KEYS "temp:*" | xargs redis-cli DEL
Q9:如何保证 Redis 的安全性?
答案:
-
设置密码
requirepass strong_password -
限制访问 IP
bind 127.0.0.1 192.168.1.100 -
禁用危险命令
rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command KEYS "" -
使用防火墙
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="6379" protocol="tcp" accept' --permanent -
定期备份
# 手动备份 redis-cli BGSAVE
Q10:Redis 启动失败怎么排查?
答案:
-
查看日志
tail -f /var/log/redis/redis.log -
检查端口占用
netstat -nltp | grep 6379 -
检查配置文件
redis-server /etc/redis/redis.conf --test-config -
检查权限
ls -l /var/lib/redis # 确保 redis 用户有读写权限
🎉 总结
本文涵盖了 Redis 从入门到安装的完整流程:
✅ 理解 Redis:内存数据库、高性能、键值对存储
✅ 应用场景:缓存、分布式锁、计数器、排行榜、消息队列
✅ 安装方式:yum 快速安装、源码编译安装
✅ 配置优化:密码、内存限制、持久化、淘汰策略
✅ 面试宝典:10 道高频面试题
📚 下一篇预告
《Redis 基础命令速通:小白上手必学的常用操作》
将详细讲解:
- Redis 五大数据类型的命令
- 键操作、过期设置
- 实战案例演示
- 命令速查表
💬 互动时间:
你在安装 Redis 时遇到过什么问题?欢迎评论区留言!
👍 觉得有帮助,点个赞再走吧~
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)