跳到正文

Redis

中级通用

Redis 是一种常把数据放在内存中、按键快速读取和更新的数据存储服务。它适合解决网站或 App 中高频访问、短期状态共享等问题,例如让多个后端实例共用登录会话或请求计数。

你可能会说:「我的网站有好几台后端,想让它们共用登录状态和访问次数,还能让过期数据自动清掉。」

读之前建议先了解

动手看看

登录用户后端A验证通过后端BRedis
1

用户提交登录信息,请求先到了后端A。验证通过后,后端A要保存一份会话,供后续请求识别用户。

要点

  1. 1

    用键找到数据并快速操作

    你可以把 Redis 理解成后端共同访问的一处数据存储:用一个键找到对应的值。它支持字符串、列表、集合等数据类型,所以除了读取结果,也能直接做计数、维护集合。数据通常在内存中,访问延迟较低。

  2. 2

    给临时数据设置过期时间

    登录会话、验证码和页面缓存都有使用期限。把这类数据放进 Redis 时,你可以设置过期时间,让它到期后自动失效。这样后端不用每次都查主数据库,也不用另写一套定时清理逻辑。

  3. 3

    先想清楚数据丢失的代价

    Redis 可以配置持久化,但不能因此默认把它当成所有数据的唯一存放处。比如商品订单要长期保存、支持可靠查询,我们通常让关系型数据库保存正式记录;Redis 则存可重建的缓存或有明确恢复办法的状态。

容易混淆的地方

Redis 是一种数据存储服务,不等于“缓存”:缓存只是它的一种用法,它也能保存会话和计数。它和 PostgreSQL 这类关系型数据库也不是简单的快慢替代关系;后者更适合保存需要长期维护、按复杂条件查询和关联的数据。选型时先问:这份数据要保留多久,丢了能否恢复?

什么时候用

适合用

  • 商品详情被反复查看,且允许短时间内不是最新结果时,用 Redis 缓存查询结果,减少主数据库读取。
  • 网站部署了多个后端实例时,用 Redis 共享有过期时间的登录会话,避免请求换台机器就失去状态。
  • 给 API 做每用户请求次数限制时,用 Redis 保存共享计数,让多个后端实例依据同一份计数判断。

不适合用

  • 小型内部工具只有一台后端、访问量很低,数据库查询已足够快时,先用现有数据库,没必要增加 Redis。
  • 订单是业务的正式记录,需要长期保存并按用户、时间、状态组合查询时,用关系型数据库作为主要存储。
  • 只想让用户刷新当前浏览器页面后保留未提交的表单草稿,且无需跨设备同步时,用浏览器存储更直接。

练一练

你的 AI 工具部署了三个后端实例,需要限制每个用户每分钟的请求次数;付费记录则必须长期保存。你会怎样安排?

让 AI 帮你做

请为这个多实例后端加入基于 Redis 的用户级 API 限流:各实例共享计数,计数到期自动失效。先说明键的设计、过期规则和 Redis 不可用时的处理方式;付费记录仍以现有关系型数据库为准。

接下来学什么