如何将redis与vercel边缘一起使用
#react #nextjs #redis #vercel

简介

Vercel的边缘网络为开发人员提供了具有零配置和延迟的功能强大的计算功能。

Edge功能是JavaScript,Typescript或WebAssembly功能,其设计为比传统无服务器计算更有效,更快,并且通常自2022年12月以来可用。

重新为边缘客户
在引擎盖下,Vercel Edge使用Cloudflare工人,工人无法创建TCP连接。

由于此运行时限制了Vercel Edge,因此需要自定义客户端来使用Redis等某些服务。

要克服这个问题,我们需要使用Redis HTTP客户端和支持此funcionality的提供商。
幸运的是,我们的Upstash为我们提供了这两种东西!

如果您已经使用以下方式创建下一个应用程序。

npm install @upstash/redis

创建redis实例
安装后,您可以使用上列表创建REDIS实例并获取连接URL。然后可以在您的Vercel Edge函数中使用此连接URL来访问REDIS实例。

记住要复制Upstash仪表板的秘密:

UPSTASH_REDIS_REST_URL
UPSTASH_REDIS_REST_TOKEN

将它们复制到您的.env并将其上传到Vercel上。

创建边缘函数
https://gist.github.com/gofixgo/67f17cbac15634ea44b950d8a73a820e

import { NextRequest, NextResponse } from "next/server";
import { Redis } from "@upstash/redis";
export const config = {
  runtime: "edge",
};

if (
  !process.env.UPSTASH_REDIS_REST_URL ||
  !process.env.UPSTASH_REDIS_REST_TOKEN
) {
  throw new Error("Missing UPSTASH_REDIS_REST_URL or UPSTASH_REDIS_REST_TOKEN");
}

// Create a Redis client outside of the function
const redis = new Redis({
  url: process.env.UPSTASH_REDIS_REST_URL,
  token: process.env.UPSTASH_REDIS_REST_TOKEN,
});

export async function middleware(req: NextRequest) {
  const country = req.geo?.country || "fallback";

  // Increment the country counter
  const sameCountryVisits = await redis.incr(country);
  // Increment the total counter
  const totalVisits = await redis.incr("total");


  return NextResponse.json({
    sameCountryVisits,
    totalVisits,
  });
}

边缘功能的Upstash替代方案?
如前所述,Edge功能在运行时运行,在该运行时,由于TCP连接的V8引擎限制,常见的Redis客户将无法使用。

这意味着您可以使用自托管的redis或redislabs,除非您使用并实现REST代理。 Upstash Redis默认情况下具有此REST REST API。

使用Redis与Vercel Edge一起使用的最佳实践:
为了确保Redis在Vercel Edge上表现最佳,重要的是要遵循一些最佳实践。

这些包括保持redis键和值较小以减少内存使用情况,在缓存数据上设置到期时间以防止过时的数据以及监视REDIS性能以确保其可以处理工作负载。

此外,Redis可以与Vercel Edge Cache结合使用:https://github.com/vercel/examples/tree/main/edge-api-routes/cache-control

结论
将Upstash Redis与Vercel Edge一起使用可以为您的应用程序提供显着的性能提升。那么,为什么不尝试使用Vercel Edge尝试一下,看看它如何使您的应用程序受益?

UpStash REST API文档:https://docs.upstash.com/redis/features/restapi

快乐编码!