当前位置: 首页 > news >正文

Redis 安装配置和性能优化

目录

简介

一、Redis 基础概念与优势

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

1.2 Redis 核心特性

二、Redis 部署

2.1 环境准备与源码安装

2.2 服务脚本配置与启动

三、Redis 配置参数

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

4.1 命令行工具(redis-cli)

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

五、Redis 持久化机制

5.1 RDB 持久化:快照存储

5.2 AOF 持久化:日志追加

5.3 RDB 与 AOF 如何选择

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

6.1 内存碎片率

碎片率优化策略:

6.2 内存使用率控制

优化手段:

6.3 内存淘汰策略优化

策略选择建议:

七、总结与最佳实践

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
  1. 碎片率 < 1:说明发生内存交换,需增加物理内存或减少 Redis 内存占用
  2. 调整内存分配器:Redis 支持 ​​libc​​​、​​jemalloc​​​、​​tcmalloc​​,可编译时指定
6.2 内存使用率控制
优化手段:
  1. 使用 32 位实例:当数据量 < 4GB 时,32 位实例可减少内存占用
# 编译时指定32位模式(修改Makefile)
# CFLAGS= -m32 make
  1. 合理使用 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
  1. 设置 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 的性能优势,构建高效稳定的分布式系统。

http://www.xdnf.cn/news/879337.html

相关文章:

  • 【bug】Error: /undefinedfilename in (/tmp/ocrmypdf.io.9xfn1e3b/origin.pdf)
  • 仓库拉下ssm项目配置启动
  • Java 高频面试题场景(四):社区老年大学在线学习平台系统
  • Android四大组件通讯指南:Kotlin版组件茶话会
  • 新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
  • 6.5本日总结
  • 【设计模式】门面/外观模式
  • Angular报错:cann‘t bind to ngClass since it is‘t a known property of div
  • Spring Boot 缓存注解详解:@Cacheable、@CachePut、@CacheEvict(超详细实战版)
  • Monorepo架构: Nx Cloud 扩展能力与缓存加速
  • [华为eNSP] OSPF综合实验
  • 在不同型号的手机或平板上后台运行Aidlux
  • 4.3 HarmonyOS NEXT AI驱动的交互创新:智能助手、实时语音与AR/MR开发实战
  • 时序数据库IoTDB的UDF Sample算法在数据监控、故障预防的应用
  • 高并发内存池的轻量级模拟-主体部分:分析拆解多线程内存管理难题
  • Neo4j 完全指南:从入门到精通
  • 文档处理组件Aspose.Words 25.5全新发布 :六大新功能与性能深度优化
  • 《doubao-lite-32k 模型缓存机制使用指南》
  • npm install 相关命令
  • 04-初识css
  • 阿里云ACP云计算备考笔记 (3)——云存储RDS
  • Java转Go日记(六十):gin其他常用知识
  • Python实现markdown文件转word
  • C# ExcelWorksheet 贴图
  • WordZero:让Markdown与Word文档自由转换的Golang利器
  • 云原生 DevOps 实践路线:构建敏捷、高效、可观测的交付体系
  • Java在word中指定位置插入图片。
  • idea json生成实体类
  • XTEA与TEA的区别
  • Git 安装全攻略Linux、macOS、Windows 与源码编译