Redis是软件开发中被误用最多的工具之一——在不需要时被作为缓存层添加,或在会大幅简化架构时被避免。以下是诚实的评估。
Redis实际上是什么
Redis是一个带有可选持久化的内存键值存储。”内存”意味着它很快(微秒级读写),但数据保存在RAM中。”可选持久化”意味着你可以配置它将快照或仅追加日志写入磁盘——但它主要设计为快速的临时存储,而非记录型数据库。将其视为所有应用服务器都可以访问的非常快速的共享字典。
Redis何时有意义
缓存:典型用例。缓存昂贵的数据库查询或API响应。TTL(生存时间)过期内置其中。会话存储:存储需要在多个服务器实例间共享的Web会话数据(用户认证状态、购物车)。速率限制:每IP每分钟递增计数器——带EXPIRE的Redis原子INCR只需3行代码。发布/订阅消息:Redis发布/订阅适用于服务间简单的实时消息传递(虽然Kafka在持久性方面更好)。排行榜:Redis有序集合(ZADD、ZRANGE)使排行榜实现极其简单。
Redis何时没有意义
任何重要内容的主要数据存储——如果Redis宕机且你没有正确设置持久化,数据就会消失。替代正规数据库——Redis没有联接、ACID事务和复杂查询支持。为小规模应用增加复杂性——如果你只有一台服务器和不到10,000个用户,Redis增加运营开销而没有实质性好处。
托管Redis选项
AWS ElastiCache、Upstash(无服务器Redis,按请求付费,出色的免费层)、Redis Cloud和Railway都提供托管Redis。对于大多数应用程序,Upstash的免费层(每天10,000条命令)足以用于缓存和速率限制,无需任何基础设施管理。


![[Windows] 软件屏蔽器 v2.10.0.0](https://www.sunqi.org/wp-content/uploads/2021/12/feat-1388.jpg)

