Redis作为当前最流行的内存数据库之一,其独特的设计理念使其在多个场景中展现出卓越性能。不同于传统关系型数据库,Redis将所有数据存储在内存中,配合高效的持久化机制,实现了读写性能与数据安全的平衡。在实际生产环境中,我主要将其应用于以下场景:
重要提示:Redis虽然支持持久化,但本质上仍是内存数据库。切勿将其作为主数据存储,而应视为性能加速层。我在某电商项目中曾因过度依赖Redis持久化导致数据丢失,最终不得不从MySQL重建缓存。
Redis 6.2.6对Linux环境有明确要求:
验证环境命令示例:
bash复制# 查看内核版本
uname -r
# 检查内存
free -h
# 磁盘空间
df -h
| 获取方式 | 速度 | 稳定性 | 适用场景 |
|---|---|---|---|
| 官网下载 | 依赖网络 | 高 | 能直连外网的环境 |
| 国内镜像站 | 快 | 中 | 国内服务器 |
| 软件仓库安装 | 最快 | 高 | 快速部署测试环境 |
| 第三方网盘 | 不稳定 | 低 | 仅作备选方案 |
推荐通过官方镜像站获取:
bash复制wget https://download.redis.io/releases/redis-6.2.6.tar.gz
编译Redis需要完整的工具链,常见依赖问题包括:
bash复制# 安装SCL源
yum install centos-release-scl
# 安装GCC 9
yum install devtoolset-9-gcc*
# 临时启用
scl enable devtoolset-9 bash
bash复制yum install tcl
bash复制dd if=/dev/zero of=/swapfile bs=1M count=2048
mkswap /swapfile
swapon /swapfile
通过Make变量可提升编译效率:
bash复制make -j$(nproc) MALLOC=libc BUILD_TLS=yes
-j$(nproc):使用全部CPU核心并行编译MALLOC=libc:使用系统内存分配器(替代jemalloc)BUILD_TLS=yes:启用SSL/TLS支持执行make install PREFIX=/opt/redis可自定义安装路径,典型目录结构:
code复制/opt/redis/
├── bin/
│ ├── redis-server # 服务端程序
│ ├── redis-cli # 命令行客户端
│ ├── redis-benchmark # 性能测试工具
│ └── redis-check-* # 数据文件校验工具
└── etc/
└── redis.conf # 主配置文件
修改redis.conf时需特别注意以下参数:
conf复制# 网络配置
bind 0.0.0.0 # 允许远程连接
protected-mode no # 关闭保护模式
port 6379 # 默认端口
# 内存管理
maxmemory 2gb # 最大内存限制
maxmemory-policy allkeys-lru # 内存淘汰策略
# 持久化配置
appendonly yes # 开启AOF持久化
appendfsync everysec # 折衷的同步策略
# 安全设置
requirepass yourpassword # 设置访问密码
bash复制echo vm.overcommit_memory=1 >> /etc/sysctl.conf
echo net.core.somaxconn=1024 >> /etc/sysctl.conf
sysctl -p
bash复制echo never > /sys/kernel/mm/transparent_hugepage/enabled
bash复制ulimit -n 65535
创建/etc/systemd/system/redis.service:
ini复制[Unit]
Description=Redis Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
管理命令:
bash复制# 创建专用用户
useradd -r redis
# 设置权限
chown -R redis:redis /var/lib/redis
# 启用服务
systemctl enable redis
通过不同端口运行多个Redis实例:
bash复制cp /etc/redis.conf /etc/redis6380.conf
sed -i 's/6379/6380/g' /etc/redis6380.conf
redis-server /etc/redis6380.conf
bash复制firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --reload
redis复制ACL SETUSER alice on >password ~cached:* +get +set
bash复制# RDB备份
crontab -e
0 2 * * * /usr/local/bin/redis-cli bgsave
使用redis-cli获取关键指标:
bash复制redis-cli --stat # 实时统计
redis-cli info memory # 内存详情
redis-cli info replication # 复制状态
连接数暴涨:
redis复制SLOWLOG GET 10
内存异常增长:
redis复制MEMORY STATS
redis复制redis-cli --bigkeys
我在实际运维中发现,90%的性能问题源于不当的数据结构使用。例如某次用String存储10MB的JSON数据,导致内存碎片激增。后改用Hash结构分字段存储,内存消耗降低60%。