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 核心优势
- 高性能内存读写,低延迟
- 支持 5 种核心数据类型:String、Hash、List、Set、ZSet
- 内置 RDB+AOF 双持久化,数据不丢失
- 支持主从复制、集群、事务与原子操作
- 支持数据备份与高可用架构
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
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
主从认证密码(从库连接主库用)
masterauth
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
4.1 redis-cli 客户端命令
bash
运行
# 本地连接 redis-cli
远程连接
redis-cli -h 192.168.10.161 -p 6379
密码认证
127.0.0.1:6379> AUTH
测试连通性
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
测试100字节数据读写
redis-benchmark -d 100 -q
只测试set和lpush
redis-benchmark -t set,lpush -n -q
4.4 持久化文件修复工具
bash
运行
# 修复AOF文件 redis-check-aof –fix appendonly.aof
修复RDB文件
redis-check-rdb –fix dump.rdb
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
6.1 RDB 持久化
- 原理:定时将内存数据生成二进制快照写入磁盘。
- 触发方式bash
运行
# 手动阻塞触发(生产禁用) save
后台子进程触发(推荐)
bgsave
6.2 AOF 持久化
- 原理:记录所有写操作日志,重启时重放命令恢复数据。
- 三种同步策略
always:每次写都同步(最安全、最慢)everysec:每秒同步(折中,默认)no:操作系统控制同步(最快、不安全)
- AOF 重写bash
运行
# 手动重写 bgrewriteaof - 优点:数据安全性高、日志可读、可修复
- 缺点:文件大、恢复比 RDB 慢
6.3 持久化选型建议
- 追求性能、可容忍少量丢失:只用 RDB
- 追求数据安全、不丢失:RDB+AOF 同时开启
- 重启加载优先级:AOF > RDB
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.5:重启 Redis(先执行
shutdown save) - 碎片率 < 1:增加物理内存或降低 maxmemory
- 更换内存分配器:jemalloc/tcmalloc(编译指定)
7.3 内存使用优化
- 优先使用Hash 结构存储对象,减少 Key 数量
- 所有 Key 设置bash过期时间
运行
expire user 60 pexpire user 60000 - 控制 Value 大小,避免大 Key(>10KB 视为大 Key)
7.4 内存淘汰策略(maxmemory-policy)
volatile-lru:淘汰设置了过期时间的最近最少使用 keyvolatile-ttl:淘汰即将过期的 keyvolatile-random:随机淘汰过期 keyallkeys-lru:所有 key 中淘汰最少使用(生产推荐)allkeys-random:随机淘汰所有 keynoeviction:不淘汰,写满直接报错(默认)
8.1 设置密码
bash
运行
# 临时生效(重启失效) config set requirepass
永久生效(改配置文件)
vim /etc/redis/6379.conf requirepass
8.2 密码连接
bash
运行
# 方式1:连接时带密码 redis-cli -h 192.168.10.161 -p 6379 -a
方式2:连接后认证
redis-cli 127.0.0.1:6379> AUTH
8.3 安全关闭
bash
运行
redis-cli -a shutdown
表格
- 关闭透明大页 THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled - 设置最大打开文件数:
ulimit -n 65535 - 禁用 swap:避免内存交换导致性能暴跌
- 单实例内存控制:不超过 10GB,大内存用集群分片
- 避免大 Key:大 Key 导致网络阻塞、超时、主从同步延迟
- 定期备份:crontab 定时拷贝 dump.rdb 到异地存储
- 监控告警:监控内存使用率、连接数、淘汰 key 数、响应延迟
Redis 是高性能内存数据库,配置核心在于网络、安全、持久化、内存四大块;优化核心在于内存管理、淘汰策略、持久化选型、大 Key 治理。生产环境需结合业务场景平衡性能与数据安全,配合主从、集群实现高可用与横向扩展。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/269933.html