文章目录
- 在 Rocky Linux 9.2 上编译安装 Redis 6.2.6
- Redis 介绍
- 官网
- Redis 的核心特性
- 高性能
- 支持多种数据结构
- 多种持久化机制
- 复制与高可用
- 2.5 事务与 Lua 脚本
- 消息队列功能
- Redis 适用场景
- Redis 与其他数据库对比
- Redis 的优势与劣势
- Redis 优势
- Redis 劣势
- 部署过程
- 系统环境信息
- 环境准备
- 下载安装包
- 安装
- 配置配置文件
- 创建日志以及数据存放目录
- 配置开机自启
- 结论
在 Rocky Linux 9.2 上编译安装 Redis 6.2.6
Redis 介绍
Redis(Remote Dictionary Server)是一个开源的、基于内存的、支持多种数据结构的高性能键值存储(Key-Value Store)。它通常被用作数据库、缓存和消息队列,因其高性能和丰富的功能而广泛应用于各类系统架构中。
官网
Redis官网
下载软件包
Redis 的核心特性
高性能
- 基于内存:所有数据存储在内存中,读写速度极快,远超传统关系型数据库。
- 支持持久化:可以定期将数据存储到磁盘,防止数据丢失。
- 单线程模型:利用 I/O 多路复用技术,提高并发处理能力。
支持多种数据结构
Redis 不仅仅是简单的键值存储,还支持多种丰富的数据类型:
- String(字符串):存储普通文本、数字、二进制数据(最大 512MB)。
- List(列表):类似链表,支持队列(FIFO)和栈(LIFO)。
- Set(集合):无序唯一集合,支持交集、并集、差集运算。
- Sorted Set(有序集合):带分数的集合,支持按分数排序的数据存储。
- Hash(哈希表):键值对集合,类似于 MySQL 中的一行记录。
- Bitmap(位图):用于存储二进制位信息(如用户签到、在线状态)。
- HyperLogLog:用于基数统计(如统计网站独立访问 IP 数)。
多种持久化机制
Redis 提供了两种持久化方案:
- RDB(Redis Database):
- 以 二进制快照 的形式定期将数据存入磁盘。
- 适用于 数据恢复速度快,但可能会丢失最近的更新数据。
- AOF(Append-Only File):
- 以 日志追加 方式记录每次写操作,能最大程度防止数据丢失。
- 适用于 数据安全性要求高 的场景。
复制与高可用
- 主从复制(Master-Slave Replication):支持数据的主从同步,提高数据可用性。
- Sentinel(哨兵):提供自动故障转移和监控能力,确保 Redis 服务的高可用性。
- Cluster(集群):Redis 分布式集群模式,支持水平扩展,适用于大规模数据存储。
2.5 事务与 Lua 脚本
- Redis 事务(Transaction) 通过
MULTI
、EXEC
、WATCH
实现,但不支持回滚。 - Redis 支持 Lua 脚本,可以一次性执行多条命令,减少网络延迟。
消息队列功能
Redis 内置 发布/订阅(Pub/Sub) 和 Stream 流式数据结构,可用于构建轻量级的消息队列。
Redis 适用场景
Redis 的高性能和灵活的数据结构使其适用于多种应用场景:
-
缓存(Cache)
- 存储热点数据,加速应用访问(如数据库查询缓存、用户会话存储)。
- 结合 LRU(Least Recently Used) 进行自动淘汰。
-
分布式锁
- 通过
SETNX
+EXPIRE
实现分布式锁,适用于高并发场景。
- 通过
-
排行榜与计数器
- 使用 Sorted Set 实现排行榜(如游戏积分榜、热搜排行榜)。
- 使用 INCR 实现高并发计数(如 PV/UV 统计)。
-
Session 存储
- 使用 Redis 存储 Web 用户 Session,提高网站性能(如 Django、Flask、Spring)。
-
消息队列
- 使用 List 实现简单队列(
LPUSH
/RPOP
)。 - 使用 Stream 处理复杂的流数据。
- 使用 List 实现简单队列(
-
社交网络
- 关注、粉丝关系(使用 Set)。
- 新闻推送(使用 List + Sorted Set)。
Redis 与其他数据库对比
特性 | Redis | MySQL / PostgreSQL | MongoDB |
---|---|---|---|
数据存储 | 内存 | 磁盘 | 磁盘+内存 |
数据结构 | 键值对、多种数据类型 | 关系型表结构 | 文档存储 |
性能 | 极快(100,000+ QPS) | 中等(几千 QPS) | 中等(几万 QPS) |
事务支持 | 简单事务(无回滚) | 完整 ACID 事务 | 部分事务支持 |
扩展性 | 高(支持分布式集群) | 低(分库分表) | 高(支持集群) |
使用场景 | 缓存、队列、实时计算 | 关系数据存储 | 海量文档存储 |
Redis 的优势与劣势
Redis 优势
- 超高性能:所有数据在内存中操作,读写速度远超磁盘数据库。
- 丰富数据结构:支持多种数据类型,适应多种应用场景。
- 持久化机制:支持 RDB 和 AOF 方式,保障数据安全性。
- 分布式架构:支持主从复制、哨兵模式、集群模式,扩展性强。
Redis 劣势
- 内存占用高:所有数据都存储在内存中,成本较高。
- 单线程:尽管 Redis 依赖 I/O 多路复用提升性能,但仍然是单线程模式,在 CPU 计算密集型任务上可能存在瓶颈。
- 事务支持有限:Redis 事务不支持回滚,不适用于复杂的金融场景。
部署过程
系统环境信息
- 操作系统:Rocky Linux 9.2 (Blue Onyx)
- SELinux 状态:
Disabled
(已关闭) - 防火墙状态:
firewalld
服务未启用 (inactive (dead)
)
环境准备
-
创建数据目录
mkdir -p /data/app /data/bag
-
安装依赖
dnf -y install wget gcc tar make
下载安装包
cd /data/bag
wget http://download.redis.io/releases/redis-6.2.6.tar.gz
安装
tar xf redis-6.2.6.tar.gz
mv redis-6.2.6 /data/app/redis
cd /data/app/redis/
[root@test redis]# pwd
/data/app/redis
[root@test redis]# ls -l
总用量 240
-rw-rw-r-- 1 root root 33624 10月 4 2021 00-RELEASENOTES
-rw-rw-r-- 1 root root 51 10月 4 2021 BUGS
-rw-rw-r-- 1 root root 5026 10月 4 2021 CONDUCT
-rw-rw-r-- 1 root root 3384 10月 4 2021 CONTRIBUTING
-rw-rw-r-- 1 root root 1487 10月 4 2021 COPYING
drwxrwxr-x 7 root root 4096 4月 1 15:18 deps
-rw-rw-r-- 1 root root 11 10月 4 2021 INSTALL
-rw-rw-r-- 1 root root 151 10月 4 2021 Makefile
-rw-rw-r-- 1 root root 6888 10月 4 2021 MANIFESTO
-rw-rw-r-- 1 root root 21567 10月 4 2021 README.md
-rw-rw-r-- 1 root root 93724 10月 4 2021 redis.conf
-rwxrwxr-x 1 root root 275 10月 4 2021 runtest
-rwxrwxr-x 1 root root 279 10月 4 2021 runtest-cluster
-rwxrwxr-x 1 root root 1079 10月 4 2021 runtest-moduleapi
-rwxrwxr-x 1 root root 281 10月 4 2021 runtest-sentinel
-rw-rw-r-- 1 root root 13768 10月 4 2021 sentinel.conf
drwxrwxr-x 3 root root 4096 4月 1 15:18 src
drwxrwxr-x 11 root root 4096 10月 4 2021 tests
-rw-rw-r-- 1 root root 3055 10月 4 2021 TLS.md
drwxrwxr-x 9 root root 4096 10月 4 2021 utils
[root@test redis]#
编译
make
编译过去后,echo $?
确认是否OK,再下一步
make install
完成也echo $?
确认下
配置配置文件
mv redis.conf redis.conf-202504020011
## redis.conf
#########################################
# Redis 配置优化文件
# 适用于生产环境
########################################## 绑定地址,允许所有 IP 访问,生产环境建议改为内网 IP
bind 192.168.1.1# 保护模式,建议开启 (yes) 以增强安全性
protected-mode yes# 监听端口
port 6379# TCP 连接队列大小
tcp-backlog 511# 连接超时时间(0 代表不超时)
timeout 0# TCP 保活时间(秒),建议设大一些,避免连接被防火墙误断开
tcp-keepalive 300# 后台运行
daemonize yes# 进程 PID 文件路径
pidfile /data/app/redis/redis_6379.pid# 日志级别 (debug | verbose | notice | warning)
loglevel notice# 日志文件路径(空值表示输出到标准输出)
logfile "/data/app/redis/logs/redis-server.log"# 数据库数量(默认16个,视业务需求调整)
databases 16# 显示 Redis 启动 Logo(关闭可减少日志干扰)
always-show-logo no#########################################
# RDB 持久化
#########################################
# RDB 失败时阻止写入,避免数据损坏
stop-writes-on-bgsave-error yes
# 启用 RDB 数据压缩
rdbcompression yes
# 启用 RDB 数据校验
rdbchecksum yes
# RDB 文件名
dbfilename dump.rdb
# 关闭 RDB 删除同步文件,防止误删除
rdb-del-sync-files no
# RDB 文件存储目录,建议设为 SSD 盘
dir /data/app/redis/data/#########################################
# 复制(主从同步)
#########################################
# 允许副本在断开主库时仍然提供只读服务
replica-serve-stale-data yes
# 副本节点只读模式
replica-read-only yes
# 关闭无磁盘同步(默认使用磁盘同步)
repl-diskless-sync no
# 无磁盘同步的延迟
repl-diskless-sync-delay 5
# 关闭无磁盘加载
repl-diskless-load disabled
# 保持默认 TCP nodelay 配置
repl-disable-tcp-nodelay no
# 副本优先级(越小越容易成为主库)
replica-priority 100 #########################################
# 内存管理
#########################################
# 默认不限制内存,可根据业务需求调整
maxmemory 0
# 不驱逐数据,可改为 allkeys-lru
maxmemory-policy noeviction
# 关闭惰性删除,避免额外 CPU 开销
lazyfree-lazy-eviction no
# 关闭惰性过期
lazyfree-lazy-expire no
# 关闭惰性删除
lazyfree-lazy-server-del no # 关闭副本惰性清理
replica-lazy-flush no# 关闭 OOM 调整
oom-score-adj no
# 仅在 OOM 保护时启用
oom-score-adj-values 0 200 800#########################################
# AOF 持久化
#########################################
# 启用 AOF 持久化
appendonly yes
# AOF 文件名
appendfilename "appendonly.aof"
# 每秒同步一次,性能和安全的折中方案
appendfsync everysec
# 重写时是否关闭同步
no-appendfsync-on-rewrite no
# 触发 AOF 重写的比例
auto-aof-rewrite-percentage 100
# 触发 AOF 重写的最小大小
auto-aof-rewrite-min-size 64mb
# 允许加载截断的 AOF
aof-load-truncated yes# AOF 兼容 RDB 头部,减少重启时间
aof-use-rdb-preamble yes
#########################################
# 性能优化
#########################################
# 调高 Hz 频率,提高响应速度
hz 50
# 动态调整 Hz
dynamic-hz yes
# AOF 重写时增量同步
aof-rewrite-incremental-fsync yes
# RDB 保存时增量同步
rdb-save-incremental-fsync yes # 启用 jemalloc 线程优化内存管理
jemalloc-bg-thread yes#########################################
# 限制与监控
#########################################
# 慢查询阈值(微秒)
slowlog-log-slower-than 10000
# 慢查询日志最大条数
slowlog-max-len 128
# 关闭延迟监控
latency-monitor-threshold 0
# 关闭 key 事件通知
notify-keyspace-events ""
# 普通客户端无限制
client-output-buffer-limit normal 0 0 0
# 副本节点限制
client-output-buffer-limit replica 256mb 64mb 60
# PubSub 限制
client-output-buffer-limit pubsub 32mb 8mb 60#########################################
# 其他参数
#########################################
# RDB 触发条件
save 900 1 300 10 60 10000
# TCP 连接队列大小
tcp-backlog 511
# TCP 保活时间(秒)
tcp-keepalive 300
创建日志以及数据存放目录
mkdir -p /data/app/redis/data /data/app/redis/logs
配置开机自启
vim /etc/systemd/system/redis.service
[Unit]
Description=redis-server
After=network.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /data/app/redis/redis.conf
PrivateTmp=true[Install]
WantedBy=multi-user.target
systemctl enable redis --now # 启动并设置开机自启
版本查看
[root@test bag]# redis-server -v
Redis server v=6.2.6 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=cd4da9562e7759a9
[root@test bag]#
结论
至此,我们已成功在 Rocky Linux 9.2 上 编译安装 Redis 6.2.6,并使用 systemd 进行管理。你可以根据需求进一步优化 Redis 配置,例如调整 maxmemory
以限制 Redis 占用的内存大小,或者启用 密码认证 以提高安全性。