Redis
驱动半个互联网的内存数据存储。
Redis 是一个内存键值存储,原生支持字符串、列表、集合、有序集合、哈希、流和发布/订阅。它是 Web 应用的默认缓存、后台任务的默认消息代理,以及几乎所有系统的默认会话存储。
使用 Pier 部署
- 1 打开 Pier 控制台,点击 Add service。
- 2 从模板列表中选择 Redis。
- 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
- 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。
什么是 Redis?
Redis(Remote Dictionary Server)是现代 Web 事实上的内存数据库。各种规模的 网站都使用它:作为缓存以减轻主数据库的负载、作为会话存储、作为消息队列 代理、作为实时计数器,以及作为服务之间的发布/订阅通道。
它的 API 极简 — 大约 200 个命令分布在少数几种数据结构中 — 但这些原语 组合成出人意料的强大模式。INCR 用于计数器和限流。ZADD 用于排行榜。 LPUSH/RPOP 用于队列。发布/订阅用于扇出。Streams 用于 Kafka 风格的日志。 每个键的 EXPIRE 用于自动清理。
Pier 如何部署它
Pier 使用官方 redis Docker 镜像,配合 redis-server --requirepass 强制
密码认证。数据卷挂载到 /data,其中持久化 RDB 快照和 AOF 文件。默认
版本为 latest(当前 Redis 8,支持 RESP3);也提供 7-alpine 用于
严格的 7.x 兼容性。
备份同时捕获 RDB 和 AOF 文件。连接字符串在服务页面自动构建为
redis://:password@host:6379 — 直接粘贴到你的应用配置中。
何时不要使用 Redis
对于业务记录的长期持久存储 — 使用 PostgreSQL。对于必须在容器重启后
保留且具有严格持久化保证的内容,配置 appendfsync always(较慢)或
迁移到 Postgres。对于多租户 SaaS 隔离,使用 Postgres 的行级安全 —
Redis 数据库(DB 0-15)不是安全边界。
核心功能
亚毫秒延迟
内存操作以微秒完成。磁盘持久化(RDB 快照 + AOF)是异步且可配置的。
丰富的数据结构
不仅是字符串 — 列表、集合、有序集合(ZSET)、哈希、位图、HyperLogLog、地理空间索引、流和发布/订阅频道。
原子操作
INCR、LPUSH、SADD、ZADD 在引擎级别是原子的。计数器、队列、排行榜、限流器无需客户端锁定。
Lua 脚本与事务
EVAL 原子地运行 Lua 脚本 — 完整的多步骤逻辑无需往返。MULTI/EXEC 管道将多个命令包装在一个原子块中。
发布/订阅与流
内置发布/订阅用于扇出。Redis Streams 提供 Kafka 风格的仅追加日志,支持消费者组、回放和确认 — 无需运行 Kafka 集群。
每个键都可设 TTL
通过 EXPIRE 设置每个键的过期时间。适用于会话、密码重置令牌、幂等键、短期缓存。
应用场景
应用缓存
通过缓存昂贵的查询、计算视图和渲染模板,将数据库负载减少 90%+。
会话存储
将会话从 cookie 和 Postgres 中迁移到 Redis。亚毫秒读取、自动过期、跨多个应用服务器共享。
后台任务队列
Sidekiq(Ruby)、Celery(Python)、Bull(Node.js)、Resque、RQ — 大多数流行的任务队列都使用 Redis 作为代理。
限流
通过 INCR + EXPIRE 实现令牌桶 / 滑动窗口。几行代码;承受任何流量峰值。
实时排行榜与计数器
ZSET 处理百万条目的有序排行榜;ZINCRBY 以 O(log N) 更新排名。
代码示例
# 带 TTL 的 SET — 60 秒缓存
redis-cli SET user:42:profile '{"name":"Aleksandr"}' EX 60
# GET
redis-cli GET user:42:profile # 原子递增;在高并发下安全
redis-cli INCR views:home
# 滑动窗口限流(每个 IP 每分钟 60 个请求)
redis-cli SET ratelimit:$IP 0 EX 60 NX
redis-cli INCR ratelimit:$IP redis-cli ZADD leaderboard 100 alice 95 bob 88 carol
# 前 3 名
redis-cli ZREVRANGE leaderboard 0 2 WITHSCORES
# 原子排名提升
redis-cli ZINCRBY leaderboard 25 alice redis-cli XADD events '*' type signup user 42
redis-cli XGROUP CREATE events workers '$' MKSTREAM
redis-cli XREADGROUP GROUP workers w1 COUNT 10 STREAMS events '>' 对比
| vs Memcached | Memcached 更简单,但仅限于字符串,没有持久化、复制、发布/订阅或流。Redis 涵盖 Memcached 的用例以及其他一切。 |
| vs Valkey | Valkey 是 Redis 在 2024 年 3 月许可证变更后的开源(BSD)分支。API 兼容;如果你想走完全 OSS 路线,选 Valkey。Pier 同时提供两者。 |
| vs KeyDB | 多线程 Redis 分支。Pier 默认不提供 KeyDB 模板 — 如果需要,使用自定义 Docker 模板。 |
| vs 用于队列的 RabbitMQ | RabbitMQ 在重度 AMQP 路由语义上胜出。Redis(带 Streams 或 Bull/Sidekiq)在典型后台任务用例的简洁性、延迟和运维占用上胜出。 |
常见问题
Redis 还是开源的吗?
容器重启会丢失数据吗?
应该分配多少内存?
可以作为集群运行 Redis 吗?
如何从我的应用连接?
默认密码?
发布/订阅与流 — 选哪个?
相关服务
在你的 VPS 上部署
Redis 是一个内存键值存储,原生支持字符串、列表、集合、有序集合、哈希、流和发布/订阅。它是 Web 应用的默认缓存、后台任务的默认消息代理,以及几乎所有系统的默认会话存储。
部署此服务 →