redis.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { promisify } from "util";
  2. import redis from "redis";
  3. import env from "./env";
  4. const client = redis.createClient({
  5. host: env.REDIS_HOST,
  6. port: env.REDIS_PORT,
  7. ...(env.REDIS_PASSWORD && { password: env.REDIS_PASSWORD })
  8. });
  9. export const get: (key: string) => Promise<any> = promisify(client.get).bind(
  10. client
  11. );
  12. export const set: (
  13. key: string,
  14. value: string,
  15. ex?: string,
  16. exValue?: number
  17. ) => Promise<any> = promisify(client.set).bind(client);
  18. export const del: (key: string) => Promise<any> = promisify(client.del).bind(
  19. client
  20. );
  21. export const key = {
  22. link: (address: string, domain_id?: number, user_id?: number) =>
  23. `${address}-${domain_id || ""}-${user_id || ""}`,
  24. domain: (address: string) => `d-${address}`,
  25. stats: (link_id: number) => `s-${link_id}`,
  26. host: (address: string) => `h-${address}`,
  27. user: (emailOrKey: string) => `u-${emailOrKey}`
  28. };
  29. export const remove = {
  30. domain: (domain?: Domain) => {
  31. if (!domain) return;
  32. del(key.domain(domain.address));
  33. },
  34. host: (host?: Host) => {
  35. if (!host) return;
  36. del(key.host(host.address));
  37. },
  38. link: (link?: Link) => {
  39. if (!link) return;
  40. del(key.link(link.address, link.domain_id));
  41. },
  42. user: (user?: User) => {
  43. if (!user) return;
  44. del(key.user(user.email));
  45. del(key.user(user.apikey));
  46. }
  47. };