目录
简介
一、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 技术栈。
关系型数据库(SQL) 基于二维表格模型,通过 SQL 语句操作数据,典型代表有 MySQL、Oracle 等。其优势在于数据一致性高、事务支持完善,但在应对高并发读写、海量数据存储和横向扩展时存在瓶颈。
非关系型数据库(NoSQL) 是“Not Only SQL”的缩写,包括 Redis、MongoDB 等。它们具有非关系型、分布式、开源及横向扩展等特点,专门解决传统数据库在 Web 2.0 场景下的“三高”问题:
Redis(Remote Dictionary Server)是基于内存的开源 NoSQL 数据库,采用 key-value 存储形式,具有以下显著优势:
在 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 命令可在任意路径执行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 # 查看状态
脚本配置说明:
/etc/init.d/redis_6379
,支持系统服务管理netstat
命令用于验证 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重写的最小文件体积
关键配置说明:
allkeys-lru
(淘汰最少使用键)、volatile-ttl
(淘汰即将过期键)everysec
是性能与安全性的平衡选择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 *
:通配符查询,生产环境慎用(可能阻塞服务器)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)RDB(Redis Database)将内存中的数据定时快照到磁盘,形成二进制文件(dump.rdb)。
RDB 工作原理
RDB 优缺点
RDB 配置优化
# 调整快照触发条件(示例:更频繁的快照)
save 300 1 # 5分钟内1个key变更即快照
save 60 10 # 1分钟内10个key变更即快照
AOF(Append Only File)以日志形式记录所有写操作,重启时重放日志恢复数据。
AOF 工作原理
AOF 优缺点
AOF 配置优化
# 启用AOF并优化配置
appendonly yes # 启用AOF
appendfsync everysec # 每秒同步(平衡性能与安全)
auto-aof-rewrite-percentage 200 # 体积增长200%时触发重写
auto-aof-rewrite-min-size 100mb # 重写最小体积100MB
内存碎片率是衡量 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)
# 安全重启(先保存数据再关闭)
127.0.0.1:6379> shutdown save
libc
、jemalloc
、tcmalloc
,可编译时指定# 编译时指定32位模式(修改Makefile)
# CFLAGS= -m32 make
# 推荐方式:单个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
127.0.0.1:6379> set token abc123 ex 3600 # 1小时后过期
127.0.0.1:6379> expire user:10086 86400 # 设置key有效期为1天
通过 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
requirepass
)daemonize yes
)everysec
同步策略maxmemory
为物理内存的 45%-95%allkeys-lru
淘汰策略通过掌握上述 Redis 技术要点,开发者可以在缓存加速、实时计数、排行榜、消息队列等场景中充分发挥 Redis 的性能优势,构建高效稳定的分布式系统。