Redis 是一款内存数据存储,本资料围绕其缓存、数据结构与实时模式展开,内容以命令示例与使用约定为主。
【用途与定位】 Redis 可作为缓存层、会话存储、限流器、分布式锁、消息队列与实时排行榜等场景的数据后端。资料强调“缓存键必须设置 TTL”,并建议对 TTL 加随机抖动以避免大规模同时过期引发的惊群(thundering herd),日历对齐的过期可使用 EXPIREAT。
【键命名与管理】 推荐使用冒号分隔的层级命名,如 object-type:id:field、user:1001:profile、cache:api:/v2/products、session:abc123、ratelimit:ip:10.0.0.1、lock:order:7890。键应短小但可读,冒号只是约定而非语法。生产环境避免使用 KEYS,改用 SCAN 迭代。键管理命令包括 EXPIRE、PEXPIRE、EXPIREAT、TTL、PERSIST、DEL、UNLINK(异步删除大键)、TYPE、OBJECT ENCODING、MEMORY USAGE、EXISTS、RENAME、DUMP 与 RESTORE。
【CLI 与连接】 支持 redis-cli 基本连接、指定 host/port/密码、--tls 加密连接、URI 格式连接,以及 ping、info memory、--stat、--bigkeys、--memkeys、--latency、--scan 等诊断参数。DBSIZE 用于统计键总数。
【数据结构操作】 资料逐类给出命令示例:字符串(SET 含 EX/PX/EXAT/NX/XX 选项、GET、INCR/INCRBY/DECR、INCRBYFLOAT、MSET/MGET、APPEND、STRLEN、GETRANGE);哈希(HSET、HGET、HGETALL、HMGET、HINCRBY、HINCRBYFLOAT、HEXISTS、HDEL、HLEN、HKEYS、HSCAN);列表(LPUSH/RPUSH、LPOP/RPOP、BLPOP 阻塞弹出、LRANGE、LLEN、LTRIM、LPOS、LMOVE 原子移动);集合(SADD、SREM、SISMEMBER、SMEMBERS、SCARD、并/交/差集、SRANDMEMBER、SPOP、SSCAN);有序集合(ZADD、ZRANGE/ZREVRANGE WITHSCORES、ZRANGEBYSCORE 分页、ZRANK/ZREVRANK、ZINCRBY、ZCOUNT、ZSCORE、ZPOPMIN/ZPOPMAX、ZUNIONSTORE 权重合并)。
【实时与聚合结构】 Streams 作为追加日志用于事件溯源与消息队列,支持 XADD、XLEN、XRANGE、XREAD 阻塞读;消费者组通过 XGROUP CREATE、XREADGROUP、XACK、XPENDING、XCLAIM 实现持久化队列与故障消息认领。HyperLogLog 用于基数估算(资料称约 0.81% 误差、每键约 12KB),命令有 PFADD、PFCOUNT、PFMERGE。Bitmap 支持 SETBIT、GETBIT、BITCOUNT、BITOP 等位级操作。
【Pub/Sub 及限制】 提供 SUBSCRIBE、PSUBSCRIBE、PUBLISH、PUBSUB CHANNELS、PUBSUB NUMSUB。资料明确指出其局限:即发即弃、无持久化与重放,订阅者断线期间会丢失消息,也没有确认机制;需要可靠消息时改用带消费者组的 Streams。
【应用模式】 缓存模式包括 Cache-aside(懒加载,最常用)、Write-through(写缓存同时写数据库)、Write-behind(先写缓存、异步刷库,需应用层队列批量落库),以及基于概率提前过期或后台刷新的缓存击穿预防。会话存储建议使用 Hash 并在活动时刷新 TTL 实现滑动过期。限流给出固定窗口(简单但窗口边缘允许突发)、滑动窗口日志(精确但内存开销更高)、Lua 令牌桶三种实现思路。分布式锁使用 SET ... NX EX 获取,并用 Lua 脚本保证只有持有者才能释放;多节点 Redlock 需在 N/2+1 个独立节点获取,生产建议使用 redlock-py、redlock-node 等客户端库。
【事务与脚本】 MULTI/EXEC 提供原子批量执行,WATCH 实现乐观锁(CAS),DISCARD 放弃队列。资料特别提醒:Redis 事务不支持回滚,EXEC 中某条命令失败后其他命令仍会执行,真正的原子逻辑应使用 Lua。Lua 部分覆盖 EVAL 条件更新、SCRIPT LOAD/EVALSHA/SCRIPT EXISTS 脚本缓存,以及令牌桶限流脚本示例。
【持久化、高可用与集群】 持久化包含 RDB 快照(BGSAVE、save 配置)、AOF(appendonly、appendfsync 策略 always/everysec/no、BGREWRITEAOF)、以及 Redis 7+ 的混合模式(aof-use-rdb-preamble)。资料对比:RDB 重启快、文件小但有丢失窗口;AOF 更持久但文件更大;生产推荐混合。Sentinel 通过 sentinel monitor、down-after-milliseconds、failover-timeout、auth-pass 等配置实现主从监控与自动故障转移,客户端经 Sentinel 发现当前主节点。Cluster 使用 16384 个哈希槽分片,支持 --cluster create/info/check/reshard,客户端用 -c 跟随 MOVED 重定向;多键命令(MGET、事务)要求键在同一槽,可用哈希标签 {user:1} 强制同槽。
【内存与运维】 通过 maxmemory 与 maxmemory-policy 控制淘汰,策略包括 noeviction、allkeys-lru、allkeys-lfu、volatile-lru、volatile-ttl、allkeys-random;用 INFO memory、MEMORY DOCTOR、MEMORY USAGE、--bigkeys 做内存分析。小对象建议用 Hash(ziplist 编码),大块数据应转移到对象存储并只缓存引用。连接方面,Python redis-py 需使用 ConnectionPool,Node.js ioredis 内置连接池,资料强调不要在每请求新建连接,并按并发设置 max_connections 与超时/重试。监控命令包括 INFO all/stats/clients/replication、SLOWLOG GET、slowlog 阈值配置、MONITOR(仅调试,有性能损耗)、latency-monitor-threshold、LATENCY LATEST、CLIENT LIST 与 CLIENT SETNAME。
【常见模式】 资料给出排行榜(ZADD/ZINCRBY/ZREVRANGE 取 Top 10)、地理空间(GEOADD、GEODIST、GEOSEARCH 半径搜索)、活动流(LPUSH 配合 LTRIM 保留最近 N 条)、幂等检查(SET ... NX EX,已存在返回 nil)等示例。更多缓存模式、Pub/Sub 与 Lua 脚本可参考资料末尾指向的 references/patterns.md。
【限制说明】 资料未提供 Redis 的具体版本要求、客户端库版本兼容性、性能基准数据、授权与收费信息,也未给出完整安装步骤;这些内容暂未提供,实际使用请以官方文档为准。