忘忧的小站

  • 首页
  • 文章归档
  • 日志
  • 关于页面

  • 搜索
异常处理 AutoWrapper 入门 NoSql 数据库 sqlserver 1 分布式索引 索引 全文搜索 Lucene.Net GPS 音视频 过滤 AOP 时区 升级 ABP.Zero 数据备份 linux 阿里云盘 aliyunpan 面试题 Signalr S 汉字 css html 前端 拼音键盘 在线键盘 uniapp .Net Core XMLRPC Serilog LOKI Nlog 分布式日志 加密 总结 人生 Asp.Net Core Swagger Web Element-plus Quasar 匹配 JavaScript 正则 .Net 后台 架构师 Redis EF CORE MySQL 自考 英语 集群 Jenkins CI/DI 内网穿透 代理 ABP 学习 后端 软考

Redis配置文件及常用命令详解

发表于 2025-04-21 | 分类于 NoSql | 0 | 阅读次数 32443

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的强大之处在于其丰富的数据结构和原子操作,合理运用可以极大提升系统性能。建议在实际项目中多实践,逐步深入理解各个特性的使用场景。


欢迎在评论区留言交流,如果你觉得这篇文章有帮助,请点赞收藏支持!

  • 本文作者: 忘忧
  • 本文链接: /archives/2955
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# Redis # NoSql
Redis入门:总结与展望
MySql入门:MySQL核心概念与架构解析
  • 文章目录
  • 站点概览
忘忧

忘忧

君子藏器于身,待时而动,何不利之有

59 日志
9 分类
67 标签
RSS
Github E-mail StackOverflow
Creative Commons
0%
© 2025 忘忧
由 Halo 强力驱动