Redis完全指南:配置文件详解与常用命令大全
本文深入解析Redis核心配置,并提供全面的命令参考手册,助你彻底掌握Redis使用技巧。
📖 概述
Redis作为高性能的键值数据库,在缓存、消息队列、会话存储等场景中广泛应用。掌握其配置文件和常用命令是每个开发者必备的技能。
⚙️ Redis配置文件深度解析
配置文件位置与加载
# 默认配置文件路径
/etc/redis/redis.conf
# 指定配置文件启动
redis-server /path/to/your/redis.conf
# 检查当前配置
redis-cli config get *
核心配置项详解
🔒 网络与安全配置
# 绑定IP地址(生产环境建议指定)
bind 127.0.0.1 192.168.1.100
# 端口配置
port 6379
# 保护模式(外网访问需关闭)
protected-mode no
# 连接密码
requirepass "your_strong_password_here"
# 最大连接数
maxclients 10000
💡 生产环境建议:
- 务必设置强密码
- 限制绑定IP,避免暴露到公网
- 适当调整最大连接数
💾 持久化配置
RDB持久化配置:
# 自动保存条件
save 900 1 # 15分钟内至少1个变更
save 300 10 # 5分钟内至少10个变更
save 60 10000 # 1分钟内至少10000个变更
# RDB文件配置
dbfilename dump.rdb
dir /var/lib/redis
# 压缩配置
rdbcompression yes
rdbchecksum yes
AOF持久化配置:
# 开启AOF
appendonly yes
appendfilename "appendonly.aof"
# 同步策略
appendfsync everysec # 推荐配置
# AOF重写配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
🎯 持久化策略选择:
- 缓存场景:仅使用RDB
- 数据安全要求高:RDB+AOF
- 性能优先:调整AOF同步策略为everysec
🧠 内存管理配置
# 内存限制
maxmemory 2gb
# 内存淘汰策略
maxmemory-policy volatile-lru
# 淘汰策略说明:
# volatile-lru -> 从过期键中淘汰最近最少使用
# allkeys-lru -> 从所有键中淘汰最近最少使用
# volatile-ttl -> 从过期键中淘汰存活时间最短
# volatile-random -> 从过期键中随机淘汰
# noeviction -> 不淘汰,返回错误
性能优化配置
# 内核参数优化
vm.overcommit_memory = 1
# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 网络优化
tcp-backlog 511
timeout 0
tcp-keepalive 300
⌨️ Redis常用命令大全
1. 🔑 键(Key)操作命令
基础操作
# 设置键值(带过期时间)
SET user:1001 "John Doe" EX 3600
# 批量操作
MSET user:1001 "John" user:1002 "Jane" user:1003 "Bob"
# 获取值
GET user:1001
# 删除键
DEL user:1001 user:1002
高级特性
# 设置带过期时间的键(原子操作)
SETEX session:token 1800 "encrypted_data"
# 仅当键不存在时设置(分布式锁基础)
SETNX lock:resource_1 "owner_id"
# 获取并设置(原子操作)
GETSET counter:clicks "100"
2. 📝 字符串(String)操作
# 数值操作
INCR article:1001:views # 阅读量+1
INCRBY user:1001:points 10 # 积分+10
DECR inventory:item_001 # 库存-1
# 字符串操作
APPEND user:1001:bio " Additional info"
STRLEN user:1001:name # 字符串长度
GETRANGE user:1001:bio 0 4 # 获取子串
3. 🗂️ 哈希(Hash)操作
用户信息存储示例:
# 设置用户信息
HSET user:1001 name "John" age 30 email "john@example.com"
# 批量设置
HMSET product:1001 name "Laptop" price 999.99 stock 50 category "Electronics"
# 获取信息
HGET user:1001 name
HMGET user:1001 name age email
HGETALL user:1001
# 数值操作
HINCRBY user:1001:stats login_count 1
HINCRBYFLOAT product:1001 price -50.5
4. 📋 列表(List)操作
消息队列实现:
# 生产者:推送消息
LPUSH message:queue "task_1"
LPUSH message:queue "task_2"
# 消费者:获取消息
RPOP message:queue
# 阻塞式获取(推荐)
BRPOP message:queue 30
# 查看队列
LRANGE message:queue 0 -1
LLEN message:queue
5. 🔄 集合(Set)操作
标签系统实现:
# 添加标签
SADD article:1001:tags "tech" "programming" "redis"
SADD user:1001:interests "coding" "gaming"
# 查找共同兴趣
SINTER user:1001:interests user:1002:interests
# 推荐相关文章
SUNION article:1001:tags article:1002:tags
# 随机推荐
SRANDMEMBER article:1001:tags 3
6. 📊 有序集合(Sorted Set)操作
排行榜实现:
# 添加分数
ZADD leaderboard 1500 "player_1"
ZADD leaderboard 3200 "player_2" 2800 "player_3"
# 获取排名
ZREVRANGE leaderboard 0 9 WITHSCORES # 前10名
ZRANK leaderboard "player_1" # 升序排名
ZREVRANK leaderboard "player_1" # 降序排名
# 范围查询
ZRANGEBYSCORE leaderboard 2000 3000 WITHSCORES
🛠️ 实战应用场景
缓存策略实现
# 缓存查询结果
SETEX cache:user:1001:profile 300 "{user_data}"
# 缓存穿透防护
SETNX cache_mutex:user:9999 1 EX 5
分布式会话
# 存储会话
HSET session:abc123 user_id 1001 last_active 1635789000
EXPIRE session:abc123 1800
# 更新活跃时间
EXPIRE session:abc123 1800
限流器实现
# 简单限流
INCR rate_limit:api:1001
EXPIRE rate_limit:api:1001 60
# 复杂限流(使用Lua脚本)
EVAL "local current = redis.call('incr', KEYS[1]) if current == 1 then redis.call('expire', KEYS[1], ARGV[1]) end return current" 1 rate_limit:complex 60
📈 监控与维护命令
系统状态检查
# 基础信息
redis-cli info
# 内存分析
redis-cli info memory
# 持久化状态
redis-cli info persistence
# 查看慢查询
redis-cli slowlog get 10
性能监控
# 实时监控
redis-cli monitor
# 客户端连接管理
redis-cli client list
redis-cli client kill 127.0.0.1:53422
# 内存分析
redis-cli --bigkeys
redis-cli --memkeys
备份与恢复
# 手动RDB备份
redis-cli bgsave
# AOF重写
redis-cli bgrewriteaof
# 数据迁移
redis-cli --rdb dump.rdb
🚀 性能优化技巧
1. 连接池配置
# Python示例
import redis
pool = redis.ConnectionPool(
max_connections=50,
host='localhost',
port=6379,
decode_responses=True
)
r = redis.Redis(connection_pool=pool)
2. 管道(Pipeline)优化
# 批量操作,减少网络往返
pipe = r.pipeline()
for user_id in user_ids:
pipe.hgetall(f"user:{user_id}")
results = pipe.execute()
3. Lua脚本使用
# 原子性操作示例
EVAL "local current = redis.call('get', KEYS[1]) if current then return redis.call('incr', KEYS[1]) else return nil end" 1 counter:test
⚠️ 常见问题排查
内存问题
# 查看内存使用详情
redis-cli info memory | grep used_memory_human
# 查找大Key
redis-cli --bigkeys
# 内存碎片率
redis-cli info memory | grep mem_fragmentation_ratio
连接问题
# 查看连接数
redis-cli info clients
# 客户端列表
redis-cli client list
# 网络统计
redis-cli info stats | grep -E "(total_connections_received|rejected_connections)"
📚 总结
通过本文的学习,你应该已经掌握了:
- ✅ Redis配置文件的各项参数含义及调优方法
- ✅ 各类数据结构的适用场景及操作命令
- ✅ 常见业务场景的Redis实现方案
- ✅ 性能监控与问题排查技巧
Redis的强大之处在于其丰富的数据结构和原子操作,合理运用可以极大提升系统性能。建议在实际项目中多实践,逐步深入理解各个特性的使用场景。
欢迎在评论区留言交流,如果你觉得这篇文章有帮助,请点赞收藏支持!