*Redis 简介
Redis 是开源的内存数据结构服务器,可用作缓存、数据库和消息中间件。它将数据保存在内存中,并提供持久化、复制、哨兵和集群等能力,适合需要低延迟读写、灵活数据结构或实时消息处理的场景。
*Redis 可以用来做什么
常见用途包括:
- 缓存:保存数据库查询结果、页面片段或计算结果,并通过过期时间控制缓存生命周期。
- 会话与临时状态:存储登录会话、验证码和短期令牌。
- 计数与限流:利用 INCR、EXPIRE 等命令实现计数器、访问频率限制和配额控制。
- 排行榜与范围查询:使用有序集合按分数排序和检索。
- 任务与事件处理:使用列表、Stream 或发布订阅传递任务和事件。不同方案的持久性、确认机制和消费语义不同,需要按业务要求选择。
Redis 并不适合所有数据。成本、容量、持久性、复杂查询和事务要求都应纳入选型;数据量较大或需要复杂关系查询时,通常仍需配合其他数据库。
*支持的数据类型
Redis 支持多种数据类型,每种类型都有对应的专用命令:
- 字符串(String):保存字节序列,也可用于计数器和位操作。
- 哈希(Hash):保存字段与值的映射,适合表示对象属性。
- 列表(List):按插入顺序保存元素,支持两端操作和阻塞读取。
- 集合(Set):保存不重复成员,支持交集、并集和差集。
- 有序集合(Sorted Set):为成员关联分数,支持排名和范围查询。
- Stream:以追加方式记录消息,支持消费者组和消息确认。
- HyperLogLog:用概率算法估算基数。
- 地理空间索引:存储坐标并执行距离和范围查询。
位图和位域基于字符串实现。JSON、时间序列、搜索等扩展能力的可用性取决于所使用的 Redis 产品和模块,不能默认所有 Redis 实例都支持。
*主要特性
*内存访问与单键操作
Redis 主要在内存中处理数据。多数命令围绕特定数据类型设计,文档会注明时间复杂度。单个命令的执行具有原子性,但多个命令是否作为一个整体执行,需要使用事务或脚本并理解各自语义。
*持久化
Redis 提供 RDB 快照和 AOF 日志,也可以组合使用。持久化方式会影响性能、恢复时间和故障时可能丢失的数据量;开启持久化并不等于绝不丢数据,仍需备份和恢复演练。
*复制与高可用
主从复制可以将数据复制到副本,默认采用异步复制。哨兵用于监控和自动故障转移,Redis Cluster则提供哈希槽分片和集群高可用。故障切换期间仍可能存在数据丢失或短暂不可用,需要结合业务目标设计。
*可编程能力
Redis 支持事务、Lua 脚本和 Functions。它们适合将一组服务器端操作放在一起执行,但长时间运行的脚本会阻塞其他命令,应控制执行时间。
*快速验证
安装并启动 Redis 后,可以用 redis-cli 检查服务:
redis-cli PING
# PONG
redis-cli SET greeting "hello"
# OK
redis-cli GET greeting
# "hello"
生产环境不要直接以默认监听配置暴露到公网。部署前应配置防火墙、认证或 ACL,并根据需要启用传输加密,详见安全文档。
*在程序中使用
可以通过各语言客户端访问 Redis。选择客户端时,除了 API,还应确认维护状态、连接池、超时、重连、集群和 RESP 协议支持。
Redis 使用 ANSI C 编写,主要生产部署平台是 Linux。macOS 可用于本地开发;Windows 环境可根据官方安装指南选择 WSL、Docker 或兼容方案。具体步骤见下载与安装。