redis.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import redis, { ClientOpts, RedisClient } from 'redis';
  2. import util from 'util';
  3. import consola from 'consola';
  4. // node err回调改为promise工具库
  5. const promisify = util.promisify;
  6. class Redis {
  7. _options: ClientOpts = {};
  8. // 是否使用redis
  9. isUseRedis = false;
  10. client: RedisClient | null;
  11. constructor(options: ClientOpts) {
  12. this._options = options;
  13. const client = this.initClient(options);
  14. this.client = client;
  15. }
  16. initClient(options: ClientOpts): RedisClient {
  17. // 创建redis连接
  18. const client = redis.createClient(options);
  19. client.on('error', err => {
  20. consola.error(err);
  21. });
  22. client.on('ready', () => {
  23. consola.success('redis is ready');
  24. this.init(client);
  25. });
  26. client.on('connect', () => {
  27. consola.success('redis is connected');
  28. this.isUseRedis = true;
  29. });
  30. client.on('reconnecting', () => {
  31. consola.warn('redis is reconnecting...');
  32. });
  33. client.on('end', () => {
  34. consola.warn('redis is closed');
  35. });
  36. return client;
  37. }
  38. get = (key: string): Promise<string | null> | undefined =>
  39. this.client?.get && promisify(this.client.get).bind(this.client)(key)
  40. set = (key: string, value: string): Promise<unknown> | undefined =>
  41. this.client?.set && promisify(this.client.set).bind(this.client)(key, value)
  42. setex = (key: string, ttl: number, value: string): Promise<unknown> | undefined =>
  43. this.client?.setex && promisify(this.client.setex).bind(this.client)(key, ttl, value)
  44. init(client: redis.RedisClient): void {
  45. // redis查询和设置await/async化
  46. this.get = (key) => promisify(client.get).bind(this.client)(key);
  47. this.set = (key, value) => promisify(client.set).bind(this.client)(key, value);
  48. this.setex = (key, ttl, value) => promisify(client.setex).bind(this.client)(key, ttl, value);
  49. }
  50. }
  51. export default Redis;