upstash-redis
Ajuda seu agente a usar o Redis como um banco de dados rápido e em memória. É útil para armazenar dados temporários, como sessões de usuário ou contadores, e para limitar o número de requisições que um usuário pode fazer.
O que ela faz
Esta ferramenta permite que você use o banco de dados Redis através da internet, sem precisar de conexões complicadas. É útil para guardar informações temporárias (cache), gerenciar sessões de usuários e limitar quantas vezes algo pode ser feito em um certo período (rate limiting).
Quando usar
- ✓Quando você precisa guardar dados temporariamente para acesso rápido.
- ✓Para gerenciar o login e as informações de cada usuário conectado.
- ✓Para evitar que um usuário abuse de uma funcionalidade, limitando o número de requisições.
Exemplo do que pedir para a IA
“Configure o limite de requisições para 10 por minuto para a página de login.”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A ferramenta funciona enviando comandos para o Redis via requisições web (HTTP). Ela é configurada com credenciais que você obtém do serviço Upstash Redis.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add github/awesome-copilot --skill upstash-redisOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/upstash-redis/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Skill Upstash Redis
Esta skill cobre as três coisas que aplicativos serverless mais precisam do Redis: cache, sessões e limitação de taxa. O cliente se comunica com o Redis via HTTP, portanto, funciona onde uma conexão TCP de longa duração não funciona (middleware de borda, funções de curta duração). Siga as etapas em ordem; cada uma termina com um ponto de verificação.
Requisitos e limitações
- Um banco de dados Upstash Redis (serviço hospedado; preços baseados no uso com um nível gratuito). As credenciais são uma URL REST e um token da página do banco de dados.
- Variáveis de ambiente
UPSTASH_REDIS_REST_URLeUPSTASH_REDIS_REST_TOKEN. - Cada comando é uma requisição HTTP. Use batch com
pipeline()ouMGET/MSETquando você emite muitos comandos por requisição; eviteKEYS *em produção. - Os valores são serializados automaticamente (objetos, arrays, números retornam como foram).
Não
JSON.stringifyantes desetouparseIntdepois deget.
Etapa 1 — Instalar e criar um cliente por módulo
npm install @upstash/redis @upstash/ratelimit
// lib/redis.ts
import { Redis } from "@upstash/redis";
// Reads UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN
export const redis = Redis.fromEnv();
Crie o cliente no escopo do módulo, não dentro do manipulador de requisição, para que caches efêmeros e pipelines possam ser reutilizados entre invocações.
Ponto de verificação:
await redis.ping()retorna"PONG".
Etapa 2 — Cache-aside com TTL
import { redis } from "@/lib/redis";
type User = { id: string; name: string; plan: "free" | "pro" };
export async function getUser(userId: string): Promise<User | null> {
const key = `user:${userId}`;
const cached = await redis.get<User>(key);
if (cached) return cached;
const user = await db.users.findById(userId); // your data source
if (user) await redis.set(key, user, { ex: 3600 }); // 1 hour TTL
return user;
}
export async function updateUser(userId: string, patch: Partial<User>) {
const user = await db.users.update(userId, patch);
await redis.set(`user:${userId}`, user, { ex: 3600 }); // write-through
return user;
}
export async function deleteUser(userId: string) {
await db.users.delete(userId);
await redis.del(`user:${userId}`); // invalidate
}
Sempre defina um TTL para entradas de cache; namespace de chaves (user:123, session:abc).
Ponto de verificação: a segunda chamada para
getUserretorna sem acessar o banco de dados eawait redis.ttl("user:123")é positivo.
Etapa 3 — Sessões com expiração deslizante
import { redis } from "@/lib/redis";
const SESSION_TTL = 60 * 60 * 24; // 24 hours
export async function createSession(userId: string, data: Record<string, unknown>) {
const sessionId = crypto.randomUUID();
await redis.set(`session:${sessionId}`, { userId, ...data, createdAt: Date.now() }, { ex: SESSION_TTL });
return sessionId;
}
export async function getSession<T = Record<string, unknown>>(sessionId: string) {
const session = await redis.get<T>(`session:${sessionId}`);
if (session) await redis.expire(`session:${sessionId}`, SESSION_TTL); // slide
return session;
}
export async function destroySession(sessionId: string) {
await redis.del(`session:${sessionId}`);
}
Armazene o ID da sessão em um cookie HttpOnly; Secure; SameSite; nunca coloque o
token do Redis no código do cliente.
Ponto de verificação:
getSessionapóscreateSessionretorna o objeto comuserId; apósdestroySessionele retornanull.
Etapa 4 — Limitação de taxa de um manipulador de rota
// app/api/search/route.ts (Next.js App Router; same pattern for any fetch handler)
import { Ratelimit } from "@upstash/ratelimit";
import { Redis } from "@upstash/redis";
const ratelimit = new Ratelimit({
redis: Redis.fromEnv(),
limiter: Ratelimit.slidingWindow(10, "10 s"), // 10 requests per 10 seconds
prefix: "ratelimit:search", // isolate keys per limiter
});
export async function POST(request: Request) {
const ip = request.headers.get("x-forwarded-for")?.split(",")[0]?.trim() ?? "anonymous";
const { success, limit, remaining, reset } = await ratelimit.limit(ip);
if (!success) {
return new Response("Too Many Requests", {
status: 429,
headers: {
"X-RateLimit-Limit": String(limit),
"X-RateLimit-Remaining": String(remaining),
"Retry-After": String(Math.max(0, Math.ceil((reset - Date.now()) / 1000))),
},
});
}
// handle the request
return Response.json({ ok: true });
}
- Identificador: use o ID do usuário ou a chave de API quando autenticado; use o IP como fallback.
…
Perguntas frequentes
Preciso instalar algo?
Sim, você precisa instalar as bibliotecas `@upstash/redis` e `@upstash/ratelimit` usando um gerenciador de pacotes como o npm.
O que são 'environment variables'?
São variáveis de ambiente onde você guarda informações sensíveis como senhas ou chaves de acesso, como a URL e o token do Upstash Redis, para que não fiquem expostas no código.
Posso usar isso em qualquer lugar?
Funciona bem em ambientes serverless e edge (como Vercel, Cloudflare Workers), onde conexões de rede persistentes podem ser um problema. Não é ideal se você já tem uma conexão TCP Redis estabelecida em um servidor tradicional.
Detalhes
Descrição original do autor
Use Redis over HTTP from serverless and edge runtimes with @upstash/redis, and add rate limiting with @upstash/ratelimit. Use when the user mentions Upstash Redis, needs Redis from a Next.js route handler or middleware, Vercel, Cloudflare Workers, Deno, or Bun without TCP connection pooling, or wants cache-aside with TTLs, a session store, counters, or a 429 rate limiter using fixed window, slidin
repo: github/awesome-copilot
Popularidade
- Estrelas no GitHub
- 40 mil
- Posição no ranking
- #5410
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
acquire-codebase-knowledge
Ajuda seu agente a entender e documentar um projeto de código existente. É útil para novas pessoas entrarem no projeto ou para ter uma visão geral da arquitetura.
github/awesome-copilot
acreadiness-assess
Faz seu agente avaliar a prontidão de um projeto para IA e gerar um relatório. É útil para entender o quão bem um projeto está preparado para usar ferramentas de IA.
github/awesome-copilot
acreadiness-generate-instructions
Ajuda seu agente a criar instruções para ferramentas de IA baseadas em uma avaliação. É útil para melhorar a forma como a IA interage com o código e fecha lacunas identificadas.
github/awesome-copilot
acreadiness-policy
Faz seu agente ajudar a definir ou aplicar políticas para avaliação de projetos de IA. É útil para padronizar a forma como os projetos são avaliados e garantir conformidade.
github/awesome-copilot
Skills parecidas
api-connector-builder
Faz seu agente construir novas conexões com APIs seguindo o padrão já existente. Use quando precisar adicionar mais uma integração sem criar um novo jeito de fazer.
affaan-m/ECC
api-design
Ajuda seu agente a projetar APIs REST seguindo as melhores práticas. É útil para definir como as APIs se comunicam, como os erros são mostrados e como organizar os dados.
affaan-m/ECC
backend-patterns
Ajuda seu agente com padrões de arquitetura do lado do servidor e otimização de banco de dados. É útil para construir ou revisar o código que roda no servidor.
affaan-m/ECC