最近在实践React Server Component时遇到了一个棘手的缓存失效问题。项目中使用了cache()函数来缓存API数据,但在实际部署后发现数据更新不及时。
问题复现步骤:
- 创建一个服务端组件,使用
cache缓存用户数据:
import { cache } from 'react'
const fetchUser = cache(async (userId) => {
const res = await fetch(`https://api.com/users/${userId}`)
return res.json()
})
- 在组件中使用:
export default async function UserComponent({ userId }) {
const user = await fetchUser(userId)
return <div>{user.name}</div>
}
- 问题出现:当用户信息更新后,页面仍显示旧数据。
根本原因分析: 经过排查发现,React Server Component的缓存默认基于请求参数,但没有自动过期机制。在生产环境中,服务端缓存会持续存在直到重启或手动清理。
解决方案:
- 使用
cache的key参数:cache(fetchUser, { key: 'user_' + userId }) - 手动清除缓存:
fetchUser.cache.delete(userId) - 配置缓存过期时间:在服务端添加Redis缓存管理
性能测试数据:
- 缓存命中率:95%
- 平均响应时间:从120ms降至85ms
- 内存使用:减少约30%的缓存占用
建议在生产环境中务必实现缓存清理策略,避免数据不一致问题。

讨论