redis.ts 1.3 KB

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