Redis 是一个低延迟的内存数据库,可用于缓存、队列、限流和实时数据存储。该技能适合在需要降低数据库负载、实现限流/会话存储/排行榜、服务间发布订阅消息,或需要基于内存存储实现分布式锁与任务队列时使用。
前置条件:Linux 服务器或 Docker;安装软件包需要 root 或 sudo 权限;生产环境建议使用 Redis 7.x。
安装与设置:在 Debian/Ubuntu 上执行 sudo apt update 和 sudo apt install -y redis-server;在 RHEL/Amazon Linux 上执行 sudo dnf install -y redis;随后 sudo systemctl enable --now redis-server 启动并设为开机自启,最后用 redis-cli ping 验证,预期输出 PONG。
核心配置:编辑 /etc/redis/redis.conf。网络部分可设置 bind 0.0.0.0、port 6379、protected-mode yes 和 requirepass 密码;内存部分设置 maxmemory 2gb 和 maxmemory-policy allkeys-lru;连接部分设置 maxclients、timeout、tcp-keepalive;日志部分设置 loglevel 与 logfile;安全方面可在生产环境通过 rename-command 禁用 FLUSHALL、FLUSHDB、CONFIG、DEBUG 等危险命令,修改后需重启 redis-server。
redis-cli 命令参考:可用 redis-cli -a 密码 连接本机,或用 -h、-p 连接远程主机。字符串操作包括 SET/GET、SETEX 设置 TTL、SET ... NX EX 实现分布式锁、INCR/INCRBY 计数;哈希操作包括 HSET、HGET、HGETALL、HINCRBY;列表可用于队列,如 LPUSH、RPOP、LLEN 以及阻塞弹出 BRPOP;集合用于唯一标签,如 SADD、SMEMBERS、SISMEMBER;有序集合用于排行榜,如 ZADD、ZREVRANGE、ZINCRBY、ZRANK。键管理可用 KEYS(生产环境避免使用,改用 SCAN)、TTL、PERSIST、DEL、EXPIRE、TYPE。
持久化:RDB 快照通过 save 900 1、save 300 10、save 60 10000 等间隔规则生成,可配置 dbfilename、dir、rdbcompression。AOF 通过 appendonly yes、appendfilename、appendfsync everysec(在安全与性能间取得平衡,可选 always 或 no)以及 auto-aof-rewrite-percentage、auto-aof-rewrite-min-size 配置。生产环境推荐同时使用 RDB 与 AOF:RDB 提供快速重启和紧凑备份,AOF 提供秒级持久性。
高可用与集群:Sentinel 通过 sentinel monitor、sentinel auth-pass、sentinel down-after-milliseconds、sentinel failover-timeout、sentinel parallel-syncs 等配置监控实例并自动故障转移,建议至少运行三个 Sentinel 以保证法定票数;启动命令为 redis-sentinel /etc/redis/sentinel.conf,可通过 SENTINEL masters、SENTINEL get-master-addr-by-name、SENTINEL replicas 查询。Cluster 模式通过 redis-cli --cluster create 创建六节点集群(三主三从),并支持 add-node、rebalance 等操作;节点配置需启用 cluster-enabled、cluster-config-file、cluster-node-timeout。
常见模式:缓存可用 SET cache:key 值 EX 300 设置 TTL,或采用 cache-aside 模式(先 GET,未命中则查库再回写并设置过期);限流可用有序集合以时间戳为分数实现滑动窗口;发布订阅用 SUBSCRIBE/PUBLISH 及模式订阅 PSUBSCRIBE;分布式锁用 SET ... NX EX 获取,并用 Lua 脚本保证释放的原子性。
Docker Compose:示例包含 redis(redis:7-alpine)、redis-sentinel 和 redis-commander 三个服务,挂载配置与数据卷,配置健康检查,通过 docker compose up -d 启动后用 redis-cli ping 验证。
监控:可用 INFO stats、INFO memory、INFO replication 查看指标,统计 keyspace_hits 与 keyspace_misses 计算命中率(目标高于 95%),用 MEMORY STATS 查看内存分布,用 SLOWLOG 查看慢查询,MONITOR 实时监控所有命令(仅调试用,影响性能),CLIENT LIST 查看连接客户端。
故障排查:OOM command not allowed 通常因达到 maxmemory,可增大上限或采用更严格的淘汰策略;高延迟尖峰可能由 RDB 保存或 AOF 重写 fork 引起,可在启用 AOF 时用 save "" 禁用 RDB 并调整重写阈值;LOADING 表示正在恢复数据集;命中率低于 90% 可考虑增大内存或调整 TTL;Sentinel 未故障转移需确保至少三个 Sentinel 可达;集群 CROSSSLOT 错误可用哈希标签(如 {user:42}:profile)让相关键落在同一槽位。
限制:该资料为配置与运维参考,未提供价格、收费、具体性能基准或平台兼容范围等信息。