Redis 安装配置和性能优化

目录

简介

[一、Redis 基础概念与优势](#一、Redis 基础概念与优势)

[1.1 关系型与非关系型数据库对比](#1.1 关系型与非关系型数据库对比)

[1.2 Redis 核心特性](#1.2 Redis 核心特性)

[二、Redis 部署](#二、Redis 部署)

[2.1 环境准备与源码安装](#2.1 环境准备与源码安装)

[2.2 服务脚本配置与启动](#2.2 服务脚本配置与启动)

[三、Redis 配置参数](#三、Redis 配置参数)

[四、Redis 命令工具与常用操作](#四、Redis 命令工具与常用操作)

[4.1 命令行工具(redis-cli)](#4.1 命令行工具(redis-cli))

[4.2 性能测试工具(redis-benchmark)](#4.2 性能测试工具(redis-benchmark))

[五、Redis 持久化机制](#五、Redis 持久化机制)

[5.1 RDB 持久化:快照存储](#5.1 RDB 持久化:快照存储)

[5.2 AOF 持久化:日志追加](#5.2 AOF 持久化:日志追加)

[5.3 RDB 与 AOF 如何选择](#5.3 RDB 与 AOF 如何选择)

[六、Redis 性能优化与内存管理](#六、Redis 性能优化与内存管理)

[6.1 内存碎片率](#6.1 内存碎片率)

碎片率优化策略:

[6.2 内存使用率控制](#6.2 内存使用率控制)

优化手段:

[6.3 内存淘汰策略优化](#6.3 内存淘汰策略优化)

策略选择建议:

七、总结与最佳实践

[Redis 核心优势总结](#Redis 核心优势总结)

生产环境最佳实践


简介

Redis 作为高性能内存键值存储系统,在现代互联网架构中扮演着核心角色。本文将从基础概念入手,详细介绍 Redis 的安装部署、核心配置、常用命令、持久化机制及性能优化策略,帮助读者全面掌握 Redis 技术栈。

一、Redis 基础概念与优势

1.1 关系型与非关系型数据库对比

关系型数据库(SQL) 基于二维表格模型,通过 SQL 语句操作数据,典型代表有 MySQL、Oracle 等。其优势在于数据一致性高、事务支持完善,但在应对高并发读写、海量数据存储和横向扩展时存在瓶颈。

非关系型数据库(NoSQL) 是"Not Only SQL"的缩写,包括 Redis、MongoDB 等。它们具有非关系型、分布式、开源及横向扩展等特点,专门解决传统数据库在 Web 2.0 场景下的"三高"问题:

  • High Performance:应对每秒上万次的高并发读写
  • Huge Storage:处理海量数据的高效存储与查询
  • High Scalability & Availability:支持灵活的横向扩展与高可用架构
1.2 Redis 核心特性

Redis(Remote Dictionary Server)是基于内存的开源 NoSQL 数据库,采用 key-value 存储形式,具有以下显著优势:

  • 高性能:数据读取速度最高达 110000 次/秒,写入速度 81000 次/秒
  • 丰富数据类型:支持 Strings、Lists、Hashes、Sets、Ordered Sets 等
  • 持久化支持:提供 RDB 和 AOF 两种持久化方式,保障数据安全
  • 原子性操作:所有命令均为原子性执行
  • 主从复制:支持 master-slave 模式实现数据备份与读写分离

二、Redis 部署

2.1 环境准备与源码安装

在 Linux 系统中安装 Redis 需先准备编译环境,以下是完整安装流程:

复制代码
# 安装编译工具(GCC、Make 等)
[root@localhost src]# dnf -y install tar gcc make

# 解压 Redis 源码包(以 redis-4.0.9 为例)
[root@localhost src]# tar xvzf redis-4.0.9.tar.gz

# 进入源码目录
[root@localhost src]# cd redis-4.0.9/

# 编译 Redis(使用默认配置)
[root@localhost redis-4.0.9]# make

# 安装到指定目录(/usr/local/redis)
[root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis install

# 创建软链接方便全局调用
[root@localhost ~]# ln -s /usr/local/redis/bin/* /usr/local/bin/

命令解释

  • ​dnf install​:安装编译所需的工具包
  • ​tar xvzf​:解压 Redis 源码压缩包
  • ​make​:编译 Redis 源码
  • ​make install​:将二进制文件安装到指定目录
  • ​ln -s​:创建软链接,使 Redis 命令可在任意路径执行
2.2 服务脚本配置与启动

Redis 源码包提供了安装脚本,可快速配置为系统服务:

复制代码
# 进入工具脚本目录
[root@localhost redis-4.0.9]# cd utils/

# 运行安装脚本(交互式配置)
[root@localhost utils]# ./install_server.sh

# 查看 Redis 服务监听端口
[root@localhost utils]# netstat -lnupt | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      5494/redis-server

# 服务控制示例
[root@localhost ~]# /etc/init.d/redis_6379 stop     # 停止服务
[root@localhost ~]# /etc/init.d/redis_6379 start    # 启动服务
[root@localhost ~]# /etc/init.d/redis_6379 restart  # 重启服务
[root@localhost ~]# /etc/init.d/redis_6379 status   # 查看状态

脚本配置说明

  • 安装脚本会引导用户配置端口(默认 6379)、配置文件路径、日志文件路径等
  • 生成的服务脚本位于 ​/etc/init.d/redis_6379​,支持系统服务管理
  • ​netstat​ 命令用于验证 Redis 服务是否正常启动并监听指定端口

三、Redis 配置参数

Redis 主配置文件为 ​​/etc/redis/6379.conf​​,以下是关键配置项解析:

复制代码
# 基础网络配置
bind 127.0.0.1 192.168.10.161  # 监听的主机地址,可指定多个IP
pidfile /var/run/redis_6379.pid  # PID文件路径,用于进程管理
port 6379  # 服务端口号
daemonize yes  # 以守护进程模式运行,后台启动

# 日志配置
loglevel notice  # 日志级别(debug/verbose/notice/warning)
logfile /var/log/redis_6379.log  # 日志文件路径

# 持久化配置(RDB)
save 900 1  # 900秒内至少1个key变更则生成RDB快照
save 300 10  # 300秒内至少10个key变更则生成快照
save 60 10000  # 60秒内至少10000个key变更则生成快照
dbfilename dump.rdb  # RDB文件名
dir /var/lib/redis/6379  # 数据文件存储目录

# 连接与资源限制
timeout 300  # 客户端闲置300秒后关闭连接(0表示禁用)
maxclients 10000  # 最大客户端连接数(0表示不限制)
maxmemory 17179869184  # 最大内存限制(16GB)
maxmemory-policy allkeys-lru  # 内存不足时的淘汰策略(LRU算法)

# 安全配置
requirepass foobared  # 客户端连接密码(需通过AUTH命令验证)

# AOF持久化配置
appendonly yes  # 启用AOF持久化
appendfilename appendonly.aof  # AOF文件名
appendfsync everysec  # AOF同步策略(always/everysec/no)
no-appendfsync-on-rewrite yes  # AOF重写时暂停同步
auto-aof-rewrite-percentage 100  # AOF文件体积增长100%时触发重写
auto-aof-rewrite-min-size 64mb  # AOF重写的最小文件体积

关键配置说明

  • bind:建议在生产环境中绑定具体IP,避免公网暴露
  • maxmemory:根据服务器内存大小设置,通常为物理内存的45%-95%
  • maxmemory-policy :常用策略包括 ​allkeys-lru​(淘汰最少使用键)、​volatile-ttl​(淘汰即将过期键)
  • appendfsync :AOF同步策略中,​everysec​ 是性能与安全性的平衡选择
  • RDB与AOF:建议同时启用两种持久化方式,RDB用于快速恢复,AOF用于减少数据丢失

四、Redis 命令工具与常用操作

4.1 命令行工具(redis-cli)

redis-cli 是 Redis 的官方命令行客户端,支持连接与操作 Redis 服务器:

复制代码
# 连接本地 Redis 服务器
[root@localhost ~]# redis-cli
127.0.0.1:6379> ping  # 测试连接,返回PONG表示正常

# 连接远程 Redis 服务器(带密码)
[root@localhost ~]# redis-cli -h 192.168.10.161 -p 6379 -a "password"

# 查看命令帮助
127.0.0.1:6379> help @list  # 查看List类型相关命令
127.0.0.1:6379> help set    # 查看set命令详细说明

# 数据操作示例
127.0.0.1:6379> set teacher zhanglong  # 存储键值对
OK
127.0.0.1:6379> get teacher  # 获取键值
"zhanglong"

# key相关操作
127.0.0.1:6379> keys *  # 查看所有key
1) "teacher"
2) "k1"
127.0.0.1:6379> exists teacher  # 判断key是否存在
(integer) 1
127.0.0.1:6379> del teacher  # 删除key
(integer) 1

参数解析

  • ​-h​:指定远程服务器IP
  • ​-p​:指定端口号
  • ​-a​:指定连接密码
  • ​help @group​:按功能分组查看命令
  • ​keys *​:通配符查询,生产环境慎用(可能阻塞服务器)
4.2 性能测试工具(redis-benchmark)

redis-benchmark 用于测试 Redis 服务器的性能表现:

复制代码
# 基本性能测试(100并发,10万请求)
[root@localhost ~]# redis-benchmark -h 192.168.10.161 -p 6379 -c 100 -n 100000
8225.04 requests per second  # 每秒处理请求数

# 测试指定数据大小的性能(100字节)
[root@localhost ~]# redis-benchmark -h 192.168.10.161 -p 6379 -q -d 100
PING_NLINE: 88261.25 requests per second  # 不同操作的性能指标
SET: 83612.04 requests per second
GET: 84961.77 requests per second

# 测试特定命令的性能(set和lpush)
[root@localhost ~]# redis-benchmark -t set,lpush -n 100000 -q
SET: 85763.29 requests per second
LPUSH: 86580.09 requests per second

选项说明

  • ​-c​:并发连接数
  • ​-n​:总请求数
  • ​-d​:SET/GET值的字节大小
  • ​-t​:指定测试的命令列表
  • ​-q​:仅显示每秒请求数(query/sec)

五、Redis 持久化机制

5.1 RDB 持久化:快照存储

RDB(Redis Database)将内存中的数据定时快照到磁盘,形成二进制文件(dump.rdb)。

RDB 工作原理

  1. Redis fork 出子进程
  2. 子进程将数据集写入临时文件
  3. 写入成功后替换旧的 RDB 文件

RDB 优缺点

  • 优点
  • 文件体积小,便于备份与迁移
  • 恢复速度快,适合大规模数据集
  • 持久化过程对主进程影响小(子进程执行)
  • 缺点
  • 数据安全性低,可能丢失最近一次快照后的所有数据
  • 大规模数据集快照时可能导致服务器短暂阻塞

RDB 配置优化

复制代码
# 调整快照触发条件(示例:更频繁的快照)
save 300 1    # 5分钟内1个key变更即快照
save 60 10    # 1分钟内10个key变更即快照
5.2 AOF 持久化:日志追加

AOF(Append Only File)以日志形式记录所有写操作,重启时重放日志恢复数据。

AOF 工作原理

  1. 客户端发送写命令到服务器
  2. 服务器将命令追加到 AOF 缓冲区
  3. 根据配置策略将缓冲区内容同步到磁盘

AOF 优缺点

  • 优点
  • 数据安全性高,可配置为每秒同步或实时同步
  • 日志文件以文本格式存储,可读性强
  • 支持自动重写(rewrite),避免日志文件过大
  • 缺点
  • 文件体积通常大于 RDB
  • 恢复速度慢于 RDB
  • 频繁同步会影响性能

AOF 配置优化

复制代码
# 启用AOF并优化配置
appendonly yes              # 启用AOF
appendfsync everysec        # 每秒同步(平衡性能与安全)
auto-aof-rewrite-percentage 200  # 体积增长200%时触发重写
auto-aof-rewrite-min-size 100mb  # 重写最小体积100MB
5.3 RDB 与 AOF 如何选择
  • 优先使用 AOF:适用于对数据安全性要求高的场景(如金融交易)
  • 优先使用 RDB:适用于对恢复速度要求高、允许少量数据丢失的场景(如缓存)

六、Redis 性能优化与内存管理

6.1 内存碎片率

内存碎片率是衡量 Redis 内存使用效率的重要指标,可通过 ​​info memory​​ 命令查看:

复制代码
192.168.9.236:7001> info memory
# Memory
used_memory: 1789108864          # Redis分配的内存总量(字节)
used_memory_human: 1.67G         # 人类可读格式
used_memory_rss: 1834389504      # 操作系统分配的物理内存
mem_fragmentation_ratio: 1.03    # 内存碎片率(理想值≈1)
碎片率优化策略:
  1. 碎片率 > 1.5:重启 Redis 服务,释放无效碎片

    安全重启(先保存数据再关闭)

    127.0.0.1:6379> shutdown save

  2. 碎片率 < 1:说明发生内存交换,需增加物理内存或减少 Redis 内存占用

  3. 调整内存分配器 :Redis 支持 ​libc​​jemalloc​​tcmalloc​,可编译时指定

6.2 内存使用率控制
优化手段:
  1. 使用 32 位实例:当数据量 < 4GB 时,32 位实例可减少内存占用

    编译时指定32位模式(修改Makefile)

    CFLAGS= -m32 make

  2. 合理使用 Hash 结构:存储对象时使用 Hash 而非多个 String

    推荐方式:单个Hash存储用户信息

    127.0.0.1:6379> hset user:1 name "张三" age 25 job "developer"

    避免方式:多个String存储

    127.0.0.1:6379> set user:1:name "张三"
    127.0.0.1:6379> set user:1:age 25

  3. 设置 key 过期时间:主动淘汰无效数据

    127.0.0.1:6379> set token abc123 ex 3600 # 1小时后过期
    127.0.0.1:6379> expire user:10086 86400 # 设置key有效期为1天

6.3 内存淘汰策略优化

通过 ​​maxmemory-policy​​ 配置内存不足时的淘汰策略:

复制代码
# 常用淘汰策略配置
maxmemory-policy allkeys-lru  # 对所有key使用LRU算法淘汰
# maxmemory-policy volatile-ttl  # 对过期key中优先淘汰TTL短的
# maxmemory-policy allkeys-random  # 随机淘汰
策略选择建议:
  • 数据集包含大量过期键:​volatile-ttl​
  • 希望淘汰最少使用的键:​allkeys-lru​
  • 对淘汰策略不敏感:​allkeys-random​
  • 禁止淘汰(仅读操作):​no-enviction​

七、总结与最佳实践

Redis 核心优势总结
  • 内存存储带来的极致性能(十万级 QPS)
  • 丰富的数据结构(String/List/Hash/Set/ZSet)
  • 完善的持久化与高可用方案(RDB/AOF/主从/集群)
  • 简单易用的命令体系与客户端支持
生产环境最佳实践
  1. 部署优化
  • 绑定具体 IP,禁止公网访问
  • 设置强密码(​requirepass​
  • 启用后台守护进程(​daemonize yes​
  1. 持久化优化
  • 同时启用 RDB 和 AOF
  • AOF 采用 ​everysec​ 同步策略
  • 定期备份 RDB 文件到异地存储
  1. 内存优化
  • 设置 ​maxmemory​ 为物理内存的 45%-95%
  • 采用 ​allkeys-lru​ 淘汰策略
  • 合理使用 Hash 结构与过期时间
  1. 监控与运维
  • 实时监控内存碎片率、CPU 使用率
  • 配置告警(内存不足、持久化失败)
  • 定期进行主从切换演练

通过掌握上述 Redis 技术要点,开发者可以在缓存加速、实时计数、排行榜、消息队列等场景中充分发挥 Redis 的性能优势,构建高效稳定的分布式系统。

相关推荐
多多*1 小时前
微服务网关SpringCloudGateway+SaToken鉴权
linux·开发语言·redis·python·sql·log4j·bootstrap
HAPPY酷2 小时前
Kafka 和Redis 在系统架构中的位置
redis·kafka·系统架构
gaoliheng0063 小时前
Redis看门狗机制
java·数据库·redis
潘yi.4 小时前
Redis哨兵模式
数据库·redis·缓存
瀚海澜生5 小时前
redis系列(1)——redis高效的本质:基础键值对的组织和基础数据结构
redis
努力学习的小廉5 小时前
我爱学算法之—— 前缀和(中)
开发语言·redis·算法
多多*6 小时前
基于rpc框架Dubbo实现的微服务转发实战
java·开发语言·前端·redis·职场和发展·蓝桥杯·safari
MuYiLuck10 小时前
【redis实战篇】第八天
数据库·redis·缓存
qq_3380329213 小时前
Spring Boot/Spring应用中配置自定义RedisTemplate
spring boot·redis·spring