Redis 核心概念与部署

一、Redis 核心概念

1.本质定位

  • 开源、高性能、键值对(Key-Value)内存数据库
  • 纯内存为主,可持久化到磁盘
  • 单线程 + IO 多路复用,支撑极高并发

2.核心数据结构

  • String :字符串、数字、计算器、分布式锁
  • Hash:对象(如用户信息)
  • List:列表、队列、栈
  • Set:无序集合、去重、交集并集
  • ZSet(Sorted Set):有序集合、排行榜、延时队列
  • Stream:消息队列(5.0+,生产级 MQ)
  • Geo:地理位置、附近的人
  • HyperLogLog:基数统计(UV 统计)

3.单线程模型

  • Redis 主线程处理命令是单线程
  • 优点:无锁竞争、逻辑简单、延迟极低
  • 注意:持久化、集群同步是后台线程,不阻塞主线程

4.IO 多路复用

  • select/epoll 同时监听多个 socket
  • 一个线程就能抗几万连接,是 Redis 高性能关键

5.持久化机制(数据安全)

  • RDB:定时快照,二进制文件,恢复快
  • AOF:记录写命令日志,数据更安全
  • 混合持久化(4.0+):RDB + AOF,兼顾速度与安全

6.高可用架构

  • 主从复制:读写分离,数据备份
  • 哨兵 Sentinel:自动故障转移,主节点挂了自动切从
  • Redis Cluster:分布式集群,数据分片,水平扩容

7.内存淘汰策略

缓存满了自动删数据,常用:

  • allkeys-lru:删除最少使用的 key(生产缓存首选)
  • volatile-lru:只删除带过期时间的
  • noeviction:不删,直接报错(用于存储)

8.其他

  • 事务:MULTI / EXEC / DISCARD
  • 管道 Pipeline:批量执行命令,减少 IO
  • 发布订阅 Pub / Sub:简单消息广播
  • Lua 脚本:原子性执行复杂逻辑

二、Redis 部署(Linux CentOS 7+)

0.前置环境配置

bash 复制代码
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

# 内核优化(Redis 强制要求)
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
sysctl -p

# 关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled

1.单机部署

1.1下载安装

bash 复制代码
# 安装依赖
yum install -y gcc gcc-c++ make

# 下载源码
wget https://download.redis.io/releases/redis-8.6.2.tar.gz
tar -zxvf redis-8.6.2.tar.gz
cd redis-8.6.2

# 编译
make && make install

1.2准备配置文件

bash 复制代码
mkdir -p /etc/redis /var/lib/redis /var/log/redis
cp redis.conf /etc/redis/6379.conf

1.3核心配置(精简)

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

修改一下项:

ini 复制代码
bind 0.0.0.0
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis/6379.log"
dir /var/lib/redis
requirepass 123456
appendonly yes
maxmemory 2gb
maxmemory-policy allkeys-lru

1.4启动 & 连接

bash 复制代码
# 启动
redis-server /etc/redis/6379.conf

# 连接
redis-cli -p 6379 -a 123456

# 关闭
redis-cli -a 123456 shutdown

2.主从复制部署(一主一从)

  • 主节点:192.168.1.10:6379
  • 从节点:192.168.1.11:6379

从节点配置添加

ini 复制代码
replicaof 192.168.1.10 6379
masterauth 123456
replica-read-only yes

启动从节点即可

查看主从状态:

bash 复制代码
info replication

3.哨兵模式(Sentinel)高可用

实现主节点自动故障转移

配置 sentinel.conf

ini 复制代码
port 26379
daemonize yes
logfile "/var/log/redis/sentinel.log"
sentinel monitor mymaster 192.168.1.10 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000

启动:

bash 复制代码
redis-sentinel /etc/redis/sentinel.conf

4.Redis Cluster 集群部署(分片模式)

最少 6 个节点(3 主 3 从)

快速创建集群命令:

bash 复制代码
# 创建集群
redis-cli --cluster create \
127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 \
127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 \
--cluster-replicas 1 -a 123456

查看集群状态:

bash 复制代码
redis-cli -c -p 6379 -a 123456
cluster info
cluster nodes

三、常用运维命令

bash 复制代码
# 查看内存
info memory

# 查看持久化
info persistence

# 手动RDB快照
bgsave

# 手动AOF重写
bgrewriteaof

# 清空所有库
flushall
相关推荐
m0_493934532 小时前
如何监控AWR数据收集Job_DBA_SCHEDULER_JOBS中的BSLN_MAINTAIN_STATS
jvm·数据库·python
万岳科技系统开发2 小时前
商城系统搭建自建平台与入驻第三方平台对比分析
数据库·小程序·架构
不剪发的Tony老师2 小时前
QoreDB:一款跨平台、现代化的通用数据库客户端
数据库
五阿哥永琪2 小时前
MySQL 中 VARCHAR、TEXT 与 JSON 类型:区别、场景与选型指南
数据库·mysql·json
a9511416422 小时前
Go语言如何操作OSS_Go语言阿里云OSS上传教程【完整】
jvm·数据库·python
2401_897190552 小时前
MySQL中如何利用LIMIT配合函数分页_MySQL分页查询优化
jvm·数据库·python
Polar__Star3 小时前
C#怎么使用并发集合 C#ConcurrentDictionary和ConcurrentQueue线程安全集合怎么用【进阶】
jvm·数据库·python
卢傢蕊3 小时前
NoSQL 之 Redis 配置与优化
redis·nosql
炸炸鱼.3 小时前
NoSQL 之 Redis 配置与优化
redis·nosql