redis.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import Redis from "ioredis";
  2. import env from "./env";
  3. const client = new Redis({
  4. host: env.REDIS_HOST,
  5. port: env.REDIS_PORT,
  6. db: env.REDIS_DB,
  7. ...(env.REDIS_PASSWORD && { password: env.REDIS_PASSWORD })
  8. });
  9. export default client;
  10. export const key = {
  11. link: (address: string, domain_id?: number, user_id?: number) =>
  12. `${address}-${domain_id || ""}-${user_id || ""}`,
  13. domain: (address: string) => `d-${address}`,
  14. stats: (link_id: number) => `s-${link_id}`,
  15. host: (address: string) => `h-${address}`,
  16. user: (emailOrKey: string) => `u-${emailOrKey}`
  17. };
  18. export const remove = {
  19. domain: (domain?: Domain) => {
  20. if (!domain) return;
  21. return client.del(key.domain(domain.address));
  22. },
  23. host: (host?: Host) => {
  24. if (!host) return;
  25. return client.del(key.host(host.address));
  26. },
  27. link: (link?: Link) => {
  28. if (!link) return;
  29. return client.del(key.link(link.address, link.domain_id));
  30. },
  31. user: (user?: User) => {
  32. if (!user) return;
  33. return Promise.all([
  34. client.del(key.user(user.email)),
  35. client.del(key.user(user.apikey))
  36. ]);
  37. }
  38. };