NoSQL 之 Redis 配置与优化

一、Redis 基础认知

1.1 关系型数据库 vs NoSQL

  • 关系型数据库:结构化二维表、支持 SQL、强事务一致性;代表:MySQL、Oracle、SQL Server。
  • NoSQL(Not Only SQL):非关系型、分布式、易横向扩展、高并发读写;代表:Redis、MongoDB、HBase。
  • NoSQL 诞生背景 :解决 Web2.0 三高问题 ------高并发读写海量数据存储高可扩展高可用

1.2 Redis 核心定义

Redis(Remote Dictionary Server)是开源、C 语言编写、基于内存、支持持久化的 Key-Value 型 NoSQL 数据库,单进程模型,支持多数据结构,读写性能极高(读 11 万次 / 秒、写 8 万次 / 秒)。

1.3 Redis 核心优势

  1. 高性能内存读写,低延迟
  2. 支持 5 种核心数据类型:String、Hash、List、Set、ZSet
  3. 内置 RDB+AOF 双持久化,数据不丢失
  4. 支持主从复制、集群、事务与原子操作
  5. 支持数据备份与高可用架构

二、Redis 安装部署(全代码)

2.1 环境准备

bash

运行

复制代码
# 关闭防火墙与SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 安装依赖
yum -y install gcc gcc-c++ zlib-devel make

2.2 编译安装

bash

运行

复制代码
# 上传并解压源码包
tar -zxvf redis-4.0.9.tar.gz
cd redis-4.0.9/

# 编译(报错则用make MALLOC=libc)
make
# 报错修复
make clean && make distclean
make MALLOC=libc

# 指定路径安装
make PREFIX=/usr/local/redis install

# 软链接,方便全局调用
ln -s /usr/local/redis/bin/* /usr/local/bin/

2.3 一键配置服务

bash

运行

复制代码
# 进入工具目录执行安装脚本
cd utils/
./install_server.sh

# 按回车默认配置即可
# 配置文件:/etc/redis/6379.conf
# 日志文件:/var/log/redis_6379.log
# 数据目录:/var/lib/redis/6379
# 可执行文件:/usr/local/redis/bin/redis-server
# 客户端:/usr/local/redis/bin/redis-cli

2.4 服务管理命令

bash

运行

复制代码
# 启动
/etc/init.d/redis_6379 start
# 停止
/etc/init.d/redis_6379 stop
# 重启
/etc/init.d/redis_6379 restart
# 状态
/etc/init.d/redis_6379 status

# 查看端口监听
netstat -lnupt | grep redis
ss -tnlp | grep redis

三、Redis 核心配置(6379.conf 全参数详解)

bash

运行

复制代码
vim /etc/redis/6379.conf

3.1 基础网络配置

bash

运行

复制代码
# 监听IP(多IP用空格分隔)
bind 127.0.0.1 192.168.10.161
# 端口
port 6379
# 保护模式(生产关闭)
protected-mode no
# 客户端闲置超时关闭(0为不关闭)
timeout 300

3.2 守护进程与日志

bash

运行

复制代码
# 后台运行
daemonize yes
# PID文件路径
pidfile /var/run/redis_6379.pid
# 日志级别:debug/verbose/notice/warning
loglevel notice
# 日志文件
logfile /var/log/redis_6379.log

3.3 数据存储配置

bash

运行

复制代码
# 数据文件存放目录
dir /var/lib/redis/6379
# RDB文件名
dbfilename dump.rdb
# AOF文件名
appendfilename appendonly.aof

3.4 安全配置

bash

运行

复制代码
# 连接密码
requirepass 123456
# 主从认证密码(从库连接主库用)
masterauth 123456

3.5 客户端限制

bash

运行

复制代码
# 最大连接数(0不限制)
maxclients 10000

3.6 内存配置

bash

运行

复制代码
# 最大使用内存
maxmemory 1G
# 内存淘汰策略
maxmemory-policy allkeys-lru

3.7 持久化配置

bash

运行

复制代码
# RDB自动快照策略
save 900 1
save 300 10
save 60 10000
# RDB压缩
rdbcompression yes

# 开启AOF
appendonly yes
# AOF同步策略
appendfsync everysec
# AOF自动重写阈值
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 重写时不阻塞新写入
no-appendfsync-on-rewrite yes

四、Redis 命令工具使用

4.1 redis-cli 客户端命令

bash

运行

复制代码
# 本地连接
redis-cli

# 远程连接
redis-cli -h 192.168.10.161 -p 6379

# 密码认证
127.0.0.1:6379> AUTH 123456

# 测试连通性
127.0.0.1:6379> PING
PONG

4.2 帮助命令

bash

运行

复制代码
# 查看某类命令
help @list
help @string

# 查看单个命令用法
help set
help get

4.3 redis-benchmark 性能测试

bash

运行

复制代码
# 基础测试:100并发、10万请求
redis-benchmark -h 192.168.10.161 -p 6379 -c 100 -n 100000

# 测试100字节数据读写
redis-benchmark -d 100 -q

# 只测试set和lpush
redis-benchmark -t set,lpush -n 100000 -q

4.4 持久化文件修复工具

bash

运行

复制代码
# 修复AOF文件
redis-check-aof --fix appendonly.aof

# 修复RDB文件
redis-check-rdb --fix dump.rdb

五、Redis 常用操作命令(全)

5.1 基础 Key-Value 操作

bash

运行

复制代码
# 设值
set teacher zhanglong
# 取值
get teacher
# 设值并指定过期时间10秒
set user tom EX 10

5.2 Key 管理命令

bash

运行

复制代码
# 查看所有key
KEYS *
# 查看以v开头的key
KEYS v*
# 查看v开头+1位字符
KEYS v?
# 查看v开头+2位字符
KEYS v??

# 判断key是否存在
exists teacher
# 删除key
del v5
# 查看key类型
type k1
# 重命名(覆盖)
rename v22 v2
# 安全重命名(目标存在则不执行)
renamenx v2 teacher
# 查看key数量
dbsize

5.3 多数据库操作

bash

运行

复制代码
# 切换到10号库(默认0-15共16个库)
select 10
# 移动key到1号库
move k1 1
# 清空当前库
FLUSHDB
# 清空所有库(高危)
FLUSHALL

六、Redis 持久化(RDB + AOF)

6.1 RDB 持久化

  • 原理:定时将内存数据生成二进制快照写入磁盘。

  • 触发方式

    bash

    运行

    复制代码
    # 手动阻塞触发(生产禁用)
    save
    # 后台子进程触发(推荐)
    bgsave
  • 优点:文件小、恢复快、适合全量备份

  • 缺点:宕机丢失最后一次快照后数据、fork 子进程可能阻塞

6.2 AOF 持久化

  • 原理:记录所有写操作日志,重启时重放命令恢复数据。

  • 三种同步策略

    • always:每次写都同步(最安全、最慢)
    • everysec:每秒同步(折中,默认)
    • no:操作系统控制同步(最快、不安全)
  • AOF 重写

    bash

    运行

    复制代码
    # 手动重写
    bgrewriteaof
  • 优点:数据安全性高、日志可读、可修复

  • 缺点:文件大、恢复比 RDB 慢

6.3 持久化选型建议

  • 追求性能、可容忍少量丢失:只用 RDB
  • 追求数据安全、不丢失:RDB+AOF 同时开启
  • 重启加载优先级:AOF > RDB

七、Redis 内存优化与配置

7.1 内存状态查看

bash

运行

复制代码
127.0.0.1:6379> info memory

核心指标:

  • used_memory:Redis 实际使用内存
  • used_memory_rss:系统分配给 Redis 的物理内存
  • mem_fragmentation_ratio:内存碎片率(>1.5 偏高,<1 触发 Swap)

7.2 内存碎片解决

  1. 碎片率 > 1.5:重启 Redis (先执行shutdown save
  2. 碎片率 < 1:增加物理内存或降低 maxmemory
  3. 更换内存分配器:jemalloc/tcmalloc(编译指定)

7.3 内存使用优化

  1. 优先使用Hash 结构存储对象,减少 Key 数量

  2. 所有 Key 设置过期时间

    bash

    运行

    复制代码
    expire user 60
    pexpire user 60000
  3. 控制 Value 大小,避免大 Key(>10KB 视为大 Key)

7.4 内存淘汰策略(maxmemory-policy)

  1. volatile-lru:淘汰设置了过期时间的最近最少使用 key
  2. volatile-ttl:淘汰即将过期的 key
  3. volatile-random:随机淘汰过期 key
  4. allkeys-lru:所有 key 中淘汰最少使用(生产推荐
  5. allkeys-random:随机淘汰所有 key
  6. noeviction:不淘汰,写满直接报错(默认)

八、Redis 安全配置

8.1 设置密码

bash

运行

复制代码
# 临时生效(重启失效)
config set requirepass 123456

# 永久生效(改配置文件)
vim /etc/redis/6379.conf
requirepass 123456

8.2 密码连接

bash

运行

复制代码
# 方式1:连接时带密码
redis-cli -h 192.168.10.161 -p 6379 -a 123456

# 方式2:连接后认证
redis-cli
127.0.0.1:6379> AUTH 123456

8.3 安全关闭

bash

运行

复制代码
redis-cli -a 123456 shutdown

九、Redis vs Memcached(补充知识点)

表格

对比项 Redis Memcached
性能 单核性能强,小数据更快 多核利用率高,大数据 (>100k) 更快
数据结构 支持 5 种类型,可复杂操作 仅支持简单 Key-Value
持久化 支持 RDB+AOF 不支持,重启丢失
内存管理 简单 malloc/free Slab Allocation,无碎片
分布式 服务端集群 Redis Cluster 客户端一致性哈希实现
单 Value 大小 最大 512MB 最大 1MB
适用场景 高安全、复杂业务、缓存 + 持久化 纯缓存、多读少写、大数据量

十、生产环境优化建议(补充知识点)

  1. 关闭透明大页 THPecho never > /sys/kernel/mm/transparent_hugepage/enabled
  2. 设置最大打开文件数ulimit -n 65535
  3. 禁用 swap:避免内存交换导致性能暴跌
  4. 单实例内存控制:不超过 10GB,大内存用集群分片
  5. 避免大 Key:大 Key 导致网络阻塞、超时、主从同步延迟
  6. 定期备份:crontab 定时拷贝 dump.rdb 到异地存储
  7. 监控告警:监控内存使用率、连接数、淘汰 key 数、响应延迟

十一、总结

Redis 是高性能内存数据库,配置核心 在于网络、安全、持久化、内存四大块;优化核心 在于内存管理、淘汰策略、持久化选型、大 Key 治理。生产环境需结合业务场景平衡性能数据安全,配合主从、集群实现高可用与横向扩展。

相关推荐
J超会运2 小时前
Redis高效配置与优化指南
redis
苏渡苇2 小时前
5 分钟跑起 Redis(Docker 版)
数据库·redis·缓存·docker·redis入门
Jul1en_3 小时前
【Redis】Zset类型、命令及应用场景
数据库·redis·缓存
亚空间仓鼠3 小时前
NoSQL数据库Redis(一):数据库基础
数据库·redis·nosql
一只游鱼4 小时前
langchain4j+redis+持久化存储记忆
java·redis·langchain4j
亚空间仓鼠6 小时前
NoSQL数据库Redis(三):主从复制
redis·bootstrap·nosql
weisian1517 小时前
Java并发编程--33-Redis分布式缓存三大核心架构:主从、哨兵、分片,落地实战与选型
java·redis·缓存·主从架构·哨兵架构·分片架构
Francek Chen7 小时前
【大数据存储与管理】NoSQL数据库:03 NoSQL与关系数据库的比较
大数据·数据库·分布式·nosql
亚空间仓鼠8 小时前
NoSQL数据库Redis(四):哨兵集群
redis·bootstrap·nosql